前情提要
在开发过程中,我们经常使用Lombok @Builder来通过建造者模式构造对象,看着也更简洁。 加上Student.class带上了@Builder注解
Student s1 = Student.builder().name("张三").age(18).build();
但是在序列化和反序列化过程中,Student会转换失败。 异常原因就是Student没有空参构造器。
因为当使用@Builder之后,就默认不会有空参构造器。
使用@Builder后会发生什么
- 默认不带有空参和全参构造器,如果需要必须同时使用@AllConstructor和@NoConstructor
- 给对象设置默认值时失效
解决方案:@Builder.Defaultprivate String sex = "male";@Builder.Default private String sex = "male"; - 无法构建父类属性,解决方案: 使用@SuperBuilder
总结
目前就想到这么多,以后还有再来补充。但是实际上,我的对于@Builder的使用是不规范的。在@Builder后加上@NoConstructor会报错,这说明本来@Builder就不是和空参构造器一起使用的,它更使用与一些长期不变的实体类。