反序列化Test类时遇无构造器错误,求问题排查指导
问题分析与解决
错误原因
你遇到的Jackson反序列化错误,核心是Jackson无法创建Test类实例——当前类既没有无参构造方法,也没有提供Jackson可识别的带参构造器/创建逻辑,导致无法从JSON对象反序列化出Test实例。
代码问题点
你的Test类仅定义了带参构造,缺少无参构造;同时自定义了Builder类,导致Lombok的@Builder注解无法生成Jackson可识别的构建逻辑,进一步引发反序列化失败。
可行解决方案
方案1:添加无参构造方法(最简单)
在Test类中新增无参构造,同时加上@Setter注解让Jackson能给私有字段赋值:
@Getter @Setter @Builder(builderClassName = "Builder") @JsonIgnoreProperties(ignoreUnknown = true) public class Test { // 新增无参构造 public Test() {} public Test(String service, String user) { this.service = service; this.user = user; } private static final long serialVersionUID = 1L; @JsonProperty("service") private String service; @JsonProperty("user") private String user; @SuppressWarnings("java:S2094") public static class Builder {} }
方案2:给带参构造添加Jackson识别注解
保留现有带参构造,给构造方法加@JsonCreator,同时给每个参数加@JsonProperty指定对应JSON字段名:
@Getter @Builder(builderClassName = "Builder") @JsonIgnoreProperties(ignoreUnknown = true) public class Test { // 给构造方法添加Jackson注解 @JsonCreator public Test(@JsonProperty("service") String service, @JsonProperty("user") String user) { this.service = service; this.user = user; } private static final long serialVersionUID = 1L; @JsonProperty("service") private String service; @JsonProperty("user") private String user; @SuppressWarnings("java:S2094") public static class Builder {} }
方案3:正确使用Lombok Builder并支持Jackson反序列化
去掉自定义的Builder类,让Lombok自动生成,同时添加@Jacksonized注解(需Lombok 1.18.16及以上版本),让Jackson能通过Builder完成反序列化:
@Getter @Builder @Jacksonized @JsonIgnoreProperties(ignoreUnknown = true) public class Test { private static final long serialVersionUID = 1L; @JsonProperty("service") private String service; @JsonProperty("user") private String user; }
注:这种方式Lombok会自动生成带参构造和Builder,@Jacksonized会自动配置Jackson识别该Builder,无需手动编写构造或Builder类。
内容的提问来源于stack exchange,提问作者Priyanka Taneja
相关产品推荐
相关产品推荐

