You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot @RequestBody映射Cab子类报JSON构造实例错误解决

报错原因

Spring Boot默认使用Jackson完成JSON到Java对象的反序列化,该过程默认需要目标类提供无参构造方法。
你在Cab类中自定义了带3个参数的构造方法后,Java不会再自动生成默认的无参构造方法,Jackson找不到可用的无参构造来实例化Cab对象,就会抛出该构造失败的错误。如果父类Vehicle也只定义了有参构造、未提供无参构造,同样会触发子类实例化失败。

修复方案

任选以下一种方案配置即可:

  • 方案1:手动补全无参构造
    直接在Cab类(以及父类Vehicle,如果父类也没有无参构造的话)中添加无参构造方法:

    public Cab() {
    }
    

    原有带参构造、类属性的getter/setter方法保留即可,不需要修改其他逻辑,注意要保证类中所有需要从JSON映射的属性都提供了对应的public getter/setter方法,否则会出现字段赋值为null的问题。这是日常开发中最常用、改造成本最低的修复方式。

  • 方案2:通过注解绑定带参构造
    如果你不想额外添加无参构造,可以给已有的带参构造添加Jackson注解,明确告诉Jackson用这个构造方法实例化对象、每个参数对应JSON里的哪个字段:

    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    // 在你的Cab类原有构造方法上加注解
    @JsonCreator
    public Cab(
            @JsonProperty("licensePlate") String licensePlate,
            @JsonProperty("basePricePerKm") double basePricePerKm,
            @JsonProperty("horsePower") double horsePower
    ) {
        // 原有构造方法内的赋值逻辑不需要改动
        this.licensePlate = licensePlate;
        this.basePricePerKm = basePricePerKm;
        this.horsePower = horsePower;
    }
    
  • 方案3:使用Lombok自动生成构造方法
    如果你的项目已经引入Lombok依赖,直接在Cab类(以及对应的父类)上添加注解,编译期Lombok会自动生成需要的构造方法和getter/setter,不需要手动编写:

    import lombok.NoArgsConstructor;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    
    @Data // 自动生成所有属性的getter/setter、toString等通用方法
    @NoArgsConstructor // 自动生成无参构造
    @AllArgsConstructor // 自动生成全属性的带参构造
    public class Cab extends Vehicle {
        // 类内的属性、业务方法正常编写即可
        private String licensePlate;
        private double basePricePerKm;
        private double horsePower;
    }
    

内容的提问来源于stack exchange,提问作者ManuelP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:45:55