最近在使用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 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最新插件版本 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与现代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...
总的来说,Lombok插件在IDEA中的应用,极大地提高了开发效率,减少了因手动编写样板代码带来的错误可能性。对于大型项目或者团队开发,它可以帮助保持代码风格的一致性,使得代码更加简洁、易于理解和维护。通过离线...
赠送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-...
赠送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 插件是必要...