Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 问题的解决

在一次写定义系统统一返回值的情况下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status这个类型的错误。网上百度了很多解决的方法。\

具体的方法如下:

  1.在父类的重名的字段前面加上transient。但是你会发现父类中加了transient,如果子类中有多个含有status字段的对象还是会解析失败。

  2.删除同名字段,但是更多的情况下,我们已经在数据库定义了字段了,所以并不适用。最好的规避方法是,在开发过程中少用status等关键词作为字段名称。

  3.@expose 但是多个status上并不起效(更深原理需要进一步研究)

  4.对象里缺少   private static final long serialVersionUID = 1L;

  5.输java对象需要实现Serializable接口

经过多个版本比较之后,最后了解了,返回体中包含多个同名字段的情况,在进行Gson解析时会进行序列化操作,导致多个同名字段无法识别。我们可以通过防止这个字段序列化的方式解决,就是将同名字段都加上transient。无论是父类还是子类。

1
2
3
4
5
6
//父类<br>public class ReportDTO {
    private String id;
    private String name;
    private transient String status;
    private String creator;<br>  
}

  

1
2
3
4
5
6
7
8
子类
public class SonDTO {
    private String executor;
    private String executorName;
    private transient String status;
    private String results;
    
}

 

posted @   bug的自我救赎  阅读(2080)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示