Spring Boot Get接口CheckModel反序列化失败求助
问题解决:Jackson无法构造CheckModel实例的异常
问题根源
Jackson反序列化JSON时,需要能创建目标类的实例。你的CheckModel只有带参数的构造函数,且字段是final类型,Jackson无法自动推断如何从JSON数据中生成对象实例,因此抛出该异常。
解决方案
提供三种可行方案,根据项目需求选择:
方案1:添加无参构造函数并移除字段final修饰
修改CheckModel类,添加无参构造函数,同时去掉checking字段的final修饰符:
public class CheckModel { protected String[] checking; // 无参构造函数 public CheckModel() { } public CheckModel(String[] checking){ this.checking = checking; } }
方案2:使用Jackson注解指定构造逻辑
保留final字段,通过@JsonCreator和@JsonProperty注解告诉Jackson如何使用带参构造函数创建实例:
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; public class CheckModel { protected final String[] checking; @JsonCreator public CheckModel(@JsonProperty("checking") String[] checking){ this.checking = checking; } }
方案3:用Lombok简化代码(需项目已引入Lombok依赖)
通过Lombok注解自动生成所需构造函数,针对final字段需要开启force=true:
import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @NoArgsConstructor(force = true) @AllArgsConstructor public class CheckModel { protected final String[] checking; }
额外优化建议
你的两个GET接口都使用了@RequestBody传递参数,这不符合RESTful设计规范。GET请求通常通过URL参数(如@RequestParam)传递数据,建议将接口改为POST方法,或者调整参数传递方式,避免后续出现兼容性问题。
内容的提问来源于stack exchange,提问作者user20879521
相关产品推荐
相关产品推荐

