Ich habe eine abstrakte Klasse Fahrzeug:Jackson Filter und Polymorphie
@JsonFilter('Vehicle_Filter')
public abstract class Vehicle {
private String brand;
private int nbOfWheels;
//Other attributes, constructor & methods
}
ich ein Kind Klasse haben Auto Verlängerung Fahrzeug:
@JsonFilter('Car_Filter')
public class Car extends Vehicle {
private int nbOfDoors;
private boolean isElectric;
//Other attributes, constructor & methods
}
Und ich habe ein anderes Kind Klasse Fahrrad Verlängerung Fahrzeug:
@JsonFilter('Bike_Filter')
public class Bike extends Vehicle {
private double tirePressure;
private boolean isAllTerrain;
//Other attributes, constructor & methods
}
Lassen Sie uns sagen, dass ich eine Klasse VehicleCollection die eine Liste der Fahrzeuge Ich möchte in einer HTML-Seite angezeigt werden:
@JsonFilter('VehicleCollection_Filter')
public abstract class VehicleCollection {
private List<Vehicle> vehicles;
//Other attributes, constructor & methods
}
Dafür ich es mit Jackson serialisiert werden (von fasterXML). Angenommen, ich möchte nur einige Attribute für jedes Fahrzeug anzeigen. Ich werde eine FilterProvider Schnittstelle verwenden.
Die Frage ist: Wenn ich ein Fahrzeugattribut filtern will, möchte ich nicht unterscheiden, ob es ein Fahrrad oder ein Auto ist. Alles, was zählt, ist, dass es ein Fahrzeug ist. Ich dachte, ich mit, dass einfiel beim Filtern:
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("VehicleCollection_Filter", SimpleBeanPropertyFilter.filterOutAllExcept("vehicles"))
.addFilter("Vehicle_Filter", SimpleBeanPropertyFilter.filterOutAllExcept("brand", "nbOfDoors", "isElectric"));
... Aber wenn die Schriftsteller Aufruf dieser Fehler ausgelöst wird: Could not find filter with id: 'Car_Filter'
. Es scheint, dass Jackson nicht über Polymorphismus hören will ...
Hat jemand das gleiche Problem gehabt? Wenn ja, kann ich einen Hinweis darauf haben, wie ich es überwinden kann? Und wenn nein, gibt es eine Dokumentation oder eine implizite Erklärung darüber, warum Jackson Filter nicht mit Vererbung umgehen können?
Wenn alles was zählt ist, dass es ein Fahrzeug ist Warum hast du '@JsonFilter ('Car_Filter')'? und '@JsonFilter ('Bike_Filter')'? – Oleg
Weil in anderen Teilen der Anwendung ich Autos und Fahrräder getrennt anzeigen muss –