Spring MVC响应类型继承:缺少子类字段

时间:2017-12-19 11:48:02

标签: java spring spring-mvc

我有一个控制器方法:

CarController

conda env create

响应级

@RestController
@RequestMapping("/cars")
public class CarController {
    @RequestMapping(method= RequestMethod.GET)
    public CarsResponse getAll() {
        Car car = new ManualCar("make", 5);
        List<? extends Car> cars = Lists.newArrayList(car);
        return new CarsResponse(cars);
    }
}

模型

public class CarsResponse {
    private final List<? extends Car> cars;
    //... Constructor ...
    public List<? extends Car> getCars() {
        return this.cars;
    }
}

现在,当我调用public abstract class Car { private final String make; //... Constructor ... public String getMake() { return this.make; } } public class ManualCar extends Car { private final int gearCount; //... Constructor ... public int getGearCount() { return this.gearCount; } } 端点时,我只会从我的JSON中的/cars类中获取字段,而不是来自Car的额外字段。

是否缺少某些注释?我如何得到它,以便我的子类字段显示在响应和基类字段中?

我希望回复看起来像:

ManualCar

但它看起来像:

{
    "cars": [{
        "make": "make",
        "gearCount": 5
     }]
 }

1 个答案:

答案 0 :(得分:2)

我确实将你的代码复制到了一个空项目中,添加了缺少的构造函数(你打算通过在OP中省略它们来保存2行输出吗?),并替换Lists.newArrayList(那里的那个是, Guava?)使用标准Java变体Collections.singletonList,得到输出{"cars":[{"make":"make","gearCount":5}]}。那么也许你的问题是Guava如何创建列表?其余的代码似乎很好,并且工作正常。