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

问题描述 投票:0回答:1

我有一个控制器方法:

CarController

@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;
    }
} 

现在,当我调用我的/cars端点时,我只能从我的JSON中的Car类中获取字段,而不是来自ManualCar的额外字段。

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

我希望响应看起来像:

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

但它看起来像:

{
    "cars": [{
        "make": "make"
     }]
 }
java spring spring-mvc
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.