记录一个反序列化的bug

今天配置Gateway在网关进行token校验的时候报出了一个bug,内容如下

feign.codec.DecodeException: Error while extracting response for type [class com.doria.common.pojo.vo.HttpResult] and content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of typecom.doria.common.ad_enum.CodeEnumfrom number 20000: index value outside legal index range [0..10]; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of typecom.doria.common.ad_enum.CodeEnumfrom number 20000: index value outside legal index range [0..10] at [Source: (PushbackInputStream); line: 1, column: 21] (through reference chain: com.doria.common.pojo.vo.HttpResult["code"])

似乎是反序列化的时候出现了问题
检查步骤:
1:是否有配置一个空参构造
2:是否提供了原始的set&get方法
3:是否提供了原始的有参构造方法
原因:
我这里 由于使用枚举进行响应,所以接收的参数是枚举类,然后在里面根据语言类型进行取值并赋值给msg,所以set方法是我自定义的,所以导致了这个bug。

解决:
在pojo里改成了原始的set方法;接收数据类型和成员类型一致;

最后尝试了一下两种set都提供的方案,

结果报错另一个,有大佬能说说为啥吗

Could not extract response: no suitable HttpMessageConverter found for response type [class com.doria.common.pojo.vo.HttpResult] and content type [application/json]

后续解决
反序列化似乎会加载所有的setXXX方法进行尝试,一旦加载到这个枚举,他就无法判断加载什么内容就会报错;而我这个set方法本身就是我自己用的,所以不希望他加载,那我就改了个名字;解决了;

总结:
如果要进行序列化,set方法不支持重载;;;另外,,尽量不要在pojo中加逻辑

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值