Mit Bedingungen dynamisch ausschließen, POJO-Eigenschaft in Jackson json-Serialisierung
Habe ich eine Anforderung auf dynamisch ausschließen, bestimmte Eigenschaft innerhalb einer Liste von definierten POJO.
Die wichtigsten POJO serialisiert werden:
public class Foo
{
List<Bar> bar;
public void setBar(List<Bar> bar)
{
this.bar = bar;
}
public List<Bar> getBar()
{
return this.bar;
}
public static class Bar
{
private int id;
private boolean ignoreId;
private String name;
public void setId(int id)
{
this.id = id;
}
public int getId()
{
return this.id;
}
public void setIgnoreId(boolean ignoreId)
{
this.ignoreId = ignoreId;
}
public boolean isIgnoreId()
{
return this.ignoreId;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
}
id werden ignoriert, wenn ignoreId = true, etwa so:
[
{ "id": "1", "name": "one" },
{ "name": "two" }
{ "name": "three" }
{ "id": "4", "name": "four" }
]
Im moment, ich habe versucht mit JsonFilter
und JacksonJsonViews
aber konnte nicht die gewünschte Leistung.
Ich wäre froh, wenn alle Zeiger gegeben werden kann, die zur Erreichung dieses.
JsonFilter sollten in diesem Fall verwendet werden. Können Sie beschreiben, warum der Filter nicht funktioniert für Sie?
Ich erstellte eine Logik etwa so:
Ich erstellte eine Logik etwa so:
@JsonFilter("Exclude.Id") class PropertyFilterMixIn {}
Wenn ich Set<String> ignorableFieldNames = new ArrayList<String>().add("id");
ich tun kann: FilterProvider filters = new SimpleFilterProvider().addFilter("Exclude.Id", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames)); ObjectWriter writer = mapper.writer(filters); System.out.println(writer.writeValueAsString(new Foo())); my challenge's to dynamically add
- id`, um die ignorableFieldNames[]
wenn & nur wenn die ignoreId
wahr istInformationsquelleAutor Damilola | 2014-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie eine benutzerdefinierte Jackson filter die herausfiltern würde, ein POJO-Eigenschaft abhängig von anderen-Eigenschaft-Wert. Sollten Sie überschreiben die
PropertyFilter.serializeAsField()
Methode, um den Zugriff auf die Instanz des serialisierten Objekts. Hier ist ein Beispiel:Ausgabe:
No filter configured with id...
das obige Beispiel funktioniert bei mir. Die Jackson-version sind Sie auf? Können Sie aktualisieren Sie Ihre Frage mit dem filter code?
es sieht aus wie mein Problem ist ähnlich wie die Diskussion mit Tatu hier
InformationsquelleAutor Alexey Gavrilov
Ich bin mit Jackson 2.4.2.
Modell-Objekt:
Myy serializer ist etwa so:
HINWEIS: Die model-Klasse übergeben wird, über das Netzwerk in einer client-server-Architektur env
vJsonMapper.setFilters( new SimpleFilterProvider().addFilter( "FieldTemplateIdFilter", new ModelFieldSerializer() ) );
Sie sind mit dem ObjectMapper vor oder nach der Einstellung filtern? Kannst du eine komplette Klasse, die reproduziert dein problem? Funktioniert der code aus meiner Antwort für Sie arbeiten?
Es ist ein Recht ausführlichen code. Den Kommentar, den ich angeben, früher in den Antwort-Abschnitt sollte das problem reproduzieren. Ich habe bemerkt, sobald ich mark die
FieldTemplateObject
mit@JsonFilter("FieldTemplateIdFilter" )
, bekomme ich die exception. Als pro-jackson doc 2.3+, bemerkte ich, das Eigentum oder die getter können auch kommentiert mit @JsonFilter. Wenn ich versuche, das problem geht Weg, aber keine Filterung erfolgt.InformationsquelleAutor Damilola
Ich sah nur die Täter.
Vielen Dank @Alexey für den Aufenthalt mit mir. Nach viel versuchen, ich entdecke Jackson 2.4.2 möglicherweise erforderlich, dass ich meine serialzer innerhalb des Modells, es würde funktionieren mit. Ich Frage mich, warum, aber wahrscheinlich wegen Java-Objekt-Serialisierung Anforderungen, Jackson wurde nicht zum anzeigen der Filter zur Laufzeit. Ich hoffe, Tatu würde, VERMERKEN Sie dies im Jackson-Dokumentation
Ich habe gerade gebucht eine minified reproduzierbare version zu GitHub
InformationsquelleAutor Damilola