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