最近在使用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查询出来对象封装进入普通对象。
相关推荐
9. **@Singular**:当与`@Builder`或`@Data`等注解一起使用时,可以处理集合类型的属性,如`List<String>`,会生成`addXXX`而不是`addXXXs`的方法。 10. **@Builder**:用于创建构建者模式的类,方便构建复杂对象。...
6. Error Prone 和警告:Lombok 还提供了错误检测和警告功能,例如在使用 `@NonNull` 注解的字段上检测 null 值,以帮助开发者避免空指针异常。 7. 扩展性:Lombok 设计为可扩展的,开发者可以通过创建自定义注解和...
在本文中,我们将深入探讨Lombok的基本概念、主要功能以及如何在项目中使用它。 ### Lombok简介 Lombok是一个开源项目,由Rogier van Wijk创建,其目标是通过提供一系列的注解来自动处理类的常规构建块。这些注解...
**正文** Lombok是一款强大的Java库,它通过注解的方式简化了Java代码,尤其是在实体类中,能够自动处理getter、setter、...在实际开发中,结合Lombok与其他优秀的Java框架和库,可以进一步提升开发体验和代码质量。
- **减少出错**:使用Lombok后,开发者不再需要手动编写getter、setter等方法,减少了因手写错误导致的bug。 - **提升可读性**:通过去除大量模板代码,使得代码更加清晰、简洁。 #### 三、Lombok 安装与配置 ####...
标题提到的问题"lombok最新插件版本 idea更新后 lombok报红错",通常指的是在更新IDEA到2018.3版本后,原有的Lombok插件可能与新版本IDEA不兼容,导致代码中使用Lombok注解的部分出现错误提示或警告,即所谓的“报红...
通过使用Lombok提供的注解,开发者可以免去手动编写诸如getter、setter、equals、hashcode等常见但繁琐的代码,让代码更简洁、易读。 #### 二、Lombok的基本使用 ##### 2.1 IDE工具配置 **IntelliJ IDEA** 1. ...
标题提到的"lombok-idea2019适配版.zip"就是一个为了解决IntelliJ IDEA 2019版本与Lombok之间兼容性问题的特别调整版。通常,当IDE的新版本发布后,原有的Lombok插件可能无法正常工作,导致用户在编写代码时无法利用...
Lombok是一款非常实用的Java库,它通过注解的方式来简化JavaBean的开发,极大地减少了样板代码,提高了开发效率。...通过合理使用和配置,开发者可以极大地提升开发效率,减少因样板代码导致的错误。
- 错误减少:Lombok 自动生成的方法减少了手动编写时可能出现的错误。 - 提高开发效率:开发者可以更快地编写和维护代码,因为不需要手动添加这些常见方法。 4. **局限性** - 学习成本:初学者需要理解 Lombok ...
安装Lombok插件的方法和Eclipse类似,可以直接通过Eclipse Marketplace进行在线安装,也可以下载jar包后进行手动安装,方法与Eclipse中相同。 ### IntelliJ IDEA安装Lombok插件 1. **在线安装方式**: - 打开...
Lombok 插件的安装对于使用 IDEA 进行 Lombok 支持的项目至关重要,因为这个插件能让 IDEA 在编写和编辑代码时理解 Lombok 注解,提供代码补全和错误检查等功能。例如,当你在类中添加 `@Data` 注解时,IDEA 将知道...
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与现代Java IDE的集成可以提供很好的代码补全和错误检查功能,使得开发更加流畅。然而,也需要注意Lombok与某些库的兼容性问题,以及在团队协作时确保所有开发者都熟悉并接受Lombok的使用方式。...
赠送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...
赠送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插件在IDEA中的应用,极大地提高了开发效率,减少了因手动编写样板代码带来的错误可能性。对于大型项目或者团队开发,它可以帮助保持代码风格的一致性,使得代码更加简洁、易于理解和维护。通过离线...
赠送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 插件的安装与使用对于提高开发效率具有重要意义,下面将详细介绍 Lombok 的核心概念、功能以及如何在 IDEA 中配置和使用这个插件。 1. **Lombok 的核心概念:** Lombok 是一个源码处理库,它在编译期间自动...
2. **简化代码**:使用 Lombok,你可以避免编写大量的重复代码,如构造函数、getter 和 setter,这有助于保持代码的整洁和可读性,同时减少了因手动修改这些方法而引入的错误。 3. **IDE 集成**:Lombok 插件是必要...