在 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