No constructor found in ........ matching [java.lang.Integer, java.lang.String, java.lang.String

写了个简单查询,竟然程序报错了,上网上搜吧,一堆的各种加无参构造方法的说法,总感觉不是解决问题的根本点,好端端的一个对象,无缘无故怎么就会缺少无参构造方法了呢?
思路:对象上用了两个注解方法@Data、@Builder,问题应该就在这两个注解上面
原因:@Builder对一个DTO实现一个构造器,但是在做Json反序列化的时候发生错误,原因就是缺少无参公共的构造函数,但是呢,手动写一个无参构造函数的时候,编译会发生错误,就是和@Builder冲突。
就是@Builder注解会把对象的默认值清掉,但又不能成功编译手动写的无参构造方法

就是两个注解的冲突产生的BUG

排查:
1、单独使用@Data注解,是会生成无参数构造方法。
2、单独使用@Builder注解,生成了全属性的构造方法。
@Data和@Builder一起用:发现没有了默认的构造方法。就算手动添加无参数构造方法也都会报错!

解决办法:两种
1、加上@Tolerate 注解,让lombok假装它不存在(不感知到)。
2、四个注解一起用:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

例如:

@Data
@Entity
@Builder
@ApiModel(value="TestAttr 对象")
public class TestAttr implements Serializable {
 
    @Tolerate
    TestAttr () {}
 
    private static final long serialVersionUID = 1L;
 
    @ApiModelProperty(value = "ID")
    private String id;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TestAttr {
    ......
}    

你可能感兴趣的:(springboot,java,开发语言)