在 Spring 框架中对枚举类型的序列化/反序列化是有限制的。
假设如下面这样在某些情况下就不能正常工作:
1 | public enum PayChannelEnum implements BaseEnum<Integer> { |
比如对于具有 PayChannelEnum
类型的参数的 HTTP 接口来说:
如果请求 /get?payChannel=ALIPAY
,运行OK。但如果请求 /get?payChannel=20
, 就会抛出 MethodArgumentTypeMismatchException
异常。
–
日常开发中主要有如下几种场景使用枚举:
GET
方法, 参数列表中有枚举类型/自定义参数包含枚举;POST
方法 Form
表单POST
方法 Json
传参;一般我们有如下步骤:
ConverterFactory
接口代码:
1 | public class implements ConverterFactory<String, BaseEnum> { |
但针对Json
传参,传递值时机会解析报错,可以通过设置 @JsonCreator
和 @JsonValue
来设定默认的反序列化方法. 示例:
1 | public enum PayChannelEnum implements BaseEnum<Integer> { |
抽取范型,方便多种类型枚举
1 | public interface BaseEnum<T> { |
经过改造,就可以支持所有场景的枚举解析。
原文:https://www.cnblogs.com/lijianming180/p/12325406.html