springboot枚举反序列化,@JsonCreator注解各种报错解决方案

你多努力一点,获得的打击就多一点。

今天使用枚举传参就出现了各种报错。
比如这样的:

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: 
Input mismatch reading Enum Gender: properties-based @JsonCreator ([method Gender#codeOf(java.lang.String)]) 
expects JSON Object (JsonToken.START_OBJECT), got JsonToken.VALUE_NUMBER_INT; 

然后在网上找解决方案又变成这样的:

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: 
Cannot construct instance of `Gender`, problem: argument type mismatch

我在网上找了很多方案,最后都不如人意。没办法,降版本吧。

把jackson的版本降下来就好使了

降版本的方法很简单,就是在pom文件中添加一个标签就好了。
我们在springboot的父pom文件中可以看到它自己定义的jackson版本
请添加图片描述
那么我们只需要在我们自己项目中,把这个标签重新定义一下即可,其他什么都不需要修改,就像这样
请添加图片描述
这样,我们项目的jackson版本就修改成2.10.5了。
把Jackson的版本降到2.10.*及以下就可以正常的使用@JsonCreator注解了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用fastjson进行反序列化Java中实体的枚举字段时,如果出现错误,可以检查以下几个方面: 1. 确认枚举类中的枚举值是否能够正确映射。fastjson默认使用枚举值的名称进行序列化和反序列化,因此需要确保枚举值的名称和实际值之间的映射关系正确。 2. 确认实体类中的枚举字段的类型是否正确。如果枚举字段的类型不是枚举类本身,而是其它类型(如String),则需要使用@JSONField注解来指定fastjson进行序列化和反序列化时应该使用的类型。例如: ``` public class Entity { @JSONField(deserializeUsing = ColorDeserializer.class) private Color color; // ... } ``` 在这个例子中,ColorDeserializer是一个自定义的反序列化器,用于将枚举值的名称转换为枚举对象。在实体类中使用@JSONField注解指定该字段应该使用ColorDeserializer进行反序列化。 3. 如果仍然出现错误,可以尝试使用fastjson的自定义反序列化器来处理枚举字段。例如: ``` public class ColorDeserializer implements ObjectDeserializer { @Override public Color deserialze(DefaultJSONParser parser, Type type, Object fieldName) throws JSONException { String value = parser.getLexer().stringVal(); for (Color color : Color.values()) { if (color.name().equalsIgnoreCase(value)) { return color; } } throw new JSONException("Invalid color value: " + value); } @Override public int getFastMatchToken() { return JSONToken.LITERAL_STRING; } } ``` 然后,在进行反序列化时,可以将ColorDeserializer传递给ParserConfig对象: ``` ParserConfig.getGlobalInstance().putDeserializer(Color.class, new ColorDeserializer()); ``` 这样,fastjson就会使用ColorDeserializer来处理枚举字段的反序列化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值