【发布时间】:2017-10-21 21:37:30
【问题描述】:
我有一个抽象类Vehicle:
@JsonFilter('Vehicle_Filter')
public abstract class Vehicle {
private String brand;
private int nbOfWheels;
//Other attributes, constructor & methods
}
我有一个子类 Car 扩展 Vehicle:
@JsonFilter('Car_Filter')
public class Car extends Vehicle {
private int nbOfDoors;
private boolean isElectric;
//Other attributes, constructor & methods
}
我还有另一个子类 Bike 扩展了 Vehicle:
@JsonFilter('Bike_Filter')
public class Bike extends Vehicle {
private double tirePressure;
private boolean isAllTerrain;
//Other attributes, constructor & methods
}
假设我有一个类 VehicleCollection 表示我想在 HTML 页面中显示的车辆列表:
@JsonFilter('VehicleCollection_Filter')
public abstract class VehicleCollection {
private List<Vehicle> vehicles;
//Other attributes, constructor & methods
}
为此,我将使用 Jackson(来自 fasterXML)对其进行序列化。 假设我只想显示每辆车的一些属性。我将使用 FilterProvider 接口。
问题是:当我想过滤车辆的属性时,我不想区分它是自行车还是汽车。重要的是,它是一辆交通工具。我想我可以在过滤时想出这个:
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("VehicleCollection_Filter", SimpleBeanPropertyFilter.filterOutAllExcept("vehicles"))
.addFilter("Vehicle_Filter", SimpleBeanPropertyFilter.filterOutAllExcept("brand", "nbOfDoors", "isElectric"));
... 但是当调用 writer 时,会抛出这个错误:Could not find filter with id: 'Car_Filter'。杰克逊似乎不想听到多态性的事情……
有人遇到过同样的问题吗?如果是,我可以提示如何克服它吗?如果没有,是否有一些文档或一些隐含的解释说明为什么杰克逊过滤器不能处理继承?
【问题讨论】:
-
如果一切都很重要,那是车辆,为什么你有
@JsonFilter('Car_Filter')?和@JsonFilter('Bike_Filter')? -
因为在应用的其他部分,我需要分别显示Cars和Bikes
标签: java json jakarta-ee jackson polymorphism