`

lombok 与 fastjson 之间的错误使用与思考

    博客分类:
  • JAVA
阅读更多




最近在使用JPA的时候发现了,有lombok存在的时候,使用JPA查询出来的嵌套对象无法正确转换成JSON。


我们先来复现这个问题:


1.


 


非常简单的entity,用过hibernate的都懂,里面的嵌套1对多对象是Code。


可以看到

@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
@Data

 

这四个对象来自lombok,分表代表的内容为:无参构造器,全参构造器,重写equals和hashcode方法及所有参数的set get方法。

 

这是嵌套对象Code的代码。

 

 

2.有了这个entity,然后我们正常存入某些对象,then,进行最基本的查询操作。


 

 

3.就会出现如下异常。



 

 

显然,已经栈溢出了。

 

也显然,是因为在对象转Json的时候已经递归进行导致栈溢出。

 

4.思考

 

细心的朋友应该已经发现了,我在entity中加入了JsonView 来控制json转换,那为什么还是会出现这种com.fasterxml.jackson.databind.JsonMappingException 呢? 

 

逻辑是没有问题的(熟悉jsonview的就知道),只可能出现在某些工具错误上。

 

于是我想到了lombok,在本项目中新引用的东西,动态的生成代码(还未深入研究其原理)

 

经过多次的变量控制法,最后确定只有在1对多实体上(e.g. Group) 使用了@Data 或 @EqualsAndHashCode 就会出现这个问题。

 

所以解决办法:去掉@EqualsAndHashCode 及 @Data ,全部改为手写(其实就是让idea帮你生成,有真正的代码)

 

最终的思考结果:对象转换使用的是spring自己的fastjson,而lombok是动态生成的代码,其中lombok改写了equals及hashcode方法可能倒是fastjson在对比两个对象时候产生了错误,这是其一。第二使用@data生成get,set方法的时候,影响了jpa查询出来对象封装进入普通对象。 

 

 

 

 

  • 大小: 21.8 KB
  • 大小: 32.7 KB
  • 大小: 5.3 KB
  • 大小: 53.6 KB
  • 大小: 14.3 KB
分享到:
评论

相关推荐

    Lombok安装及使用

    Lombok安装及使用,里面包含文档说明及jar包,安装步骤、例子都在里面,欢迎使用

    lombok.jar;lombok.jar

    lombok.jar lombok.jar lombok.jar lombok.jar 亲测好用!!!

    lombok的eclipse安装包

    eclipse安装lombok支持的jar包,一键安装,简单轻松可用

    lombok详细使用文档

    lombok详细说明文档, 包含插件的使用以及插件注解的使用

    关于Lombok插件的使用.docx

    关于Lombok插件的使用.docx

    lombok-1.16.20-API文档-中文版.zip

    赠送jar包:lombok-1.16.20.jar; 赠送原API文档:lombok-1.16.20-javadoc.jar; 赠送源代码:lombok-1.16.20-sources.jar; 赠送Maven依赖信息文件:lombok-1.16.20.pom; 包含翻译后的API文档:lombok-1.16.20-...

    lombok-1.16.18-API文档-中文版.zip

    赠送jar包:lombok-1.16.18.jar; 赠送原API文档:lombok-1.16.18-javadoc.jar; 赠送源代码:lombok-1.16.18-sources.jar; 包含翻译后的API文档:lombok-1.16.18-javadoc-API文档-中文(简体)版.zip 对应Maven...

    lombok 1.18.24 良心价

    lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 lombok 1.18.24 ...

    lombok.jar(1.16.18版本)最新包

    lombok(1.16.18版本)最新包, 1、下载Lombok.jar 2、双击运行Lombok.jar 数秒后将弹出一框,以确认eclipse的安装路径 3、确认完eclipse的安装路径后,点击install/update按钮,即可安装完成 4、安装完成之后,请...

    lombok-1.16.10-API文档-中文版.zip

    赠送jar包:lombok-1.16.10.jar; 赠送原API文档:lombok-1.16.10-javadoc.jar; 赠送源代码:lombok-1.16.10-sources.jar; 赠送Maven依赖信息文件:lombok-1.16.10.pom; 包含翻译后的API文档:lombok-1.16.10-...

    lombok_lombok.zip

    lombok_lombok.zip

    eclipse的lombok驱动包

    lombok

    lombok-1.18.6-source.zip

    下载Lombok,版本为Lombok1.18.6.jar(因jdk1.8与1.16.x版本不匹配,所以才升级1.18.x版本) 安装方法: 将Lombok1.18.6.jar复制到eclipse安装目录下之后鼠标双击它,然后点击弹窗页面的Specify location按钮之后...

    lombok_lombok_源码.zip

    lombok_lombok_源码.zip

    lombok 1.18.24

    lombok 1.18.24

    lombok-1.16.10-API文档-中英对照版.zip

    赠送jar包:lombok-1.16.10.jar; 赠送原API文档:lombok-1.16.10-javadoc.jar; 赠送源代码:lombok-1.16.10-sources.jar; 赠送Maven依赖信息文件:lombok-1.16.10.pom; 包含翻译后的API文档:lombok-1.16.10-...

    lombok-1.16.20-API文档-中英对照版.zip

    赠送jar包:lombok-1.16.20.jar; 赠送原API文档:lombok-1.16.20-javadoc.jar; 赠送源代码:lombok-1.16.20-sources.jar; 赠送Maven依赖信息文件:lombok-1.16.20.pom; 包含翻译后的API文档:lombok-1.16.20-...

    lombok-1.16.18-API文档-中英对照版.zip

    赠送jar包:lombok-1.16.18.jar; 赠送原API文档:lombok-1.16.18-javadoc.jar; 赠送源代码:lombok-1.16.18-sources.jar; 包含翻译后的API文档:lombok-1.16.18-javadoc-API文档-中文(简体)-英语-对照版.zip ...

    lombok 1.18.16

    lombok 1.18.16,2020.11.9 从官网下载的:https://projectlombok.org/download

    lombok.jar

    lombok.jar 工具包 里面包含使用说明 看说明即可

Global site tag (gtag.js) - Google Analytics