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