2016-07-12 11 views
0

Ich serialisieren ein POJO mit jackosn, und ich möchte, dass alle Werte, für die der Benutzer einen Wert setzt, unabhängig davon, ob es null oder nicht ist, in die Serialisierung einbezogen werden müssen.Jackson enthalten Nullsatz von Benutzer?

So aktuell:

POJO:

public class YourItem { 
    public String key; 
    public String item; 
} 

Zeit, wenn der Benutzer tut:

YourItem item = new YourItem(); 
item.setKey("abc"); 

Die Serialisierung gibt:

{ 

     "key" : "abc" 
} 

als ichkonfiguriertals objectMapper.setInclude(Include.NON_NULL)

Aber jetzt, wenn der Benutzer den Setter speziell aufruft und den Wert als null setzt, dann möchte ich dieses Element in meiner serialisierten Zeichenfolge. Also, wenn Benutzer

YourItem item = new YourItem(); 
    item.setKey("abc"); 
    item.setItem(null); 

tun ich in serialzation will beiden Schlüssel und Elementwerte vorhanden sind, wie:

{ 

    "key" : "abc", 
    "item" : null 

} 

Wie unterscheide ich zwischen dem Benutzer eingestellt null und den Standard-null. Gibt es eine Konfiguration in ObjectMapper?

+0

Es gibt sicherlich ein Duplikat irgendwo, aber versuchen Sie 'NON_DEFAULT'. –

+0

@StiriosDelimanolis: Ich habe 'NON_DEFAULT' versucht, aber es macht keinen Unterschied. Der Null-Wert, der vom Benutzer festgelegt wurde, wird ausgelassen –

+0

Ist das nicht das, was Sie wollten? –

Antwort

1

Manche Leute halten mit null schlechter Praxis zu sein (Das Buch Clean Code, zum Beispiel)

dass Ohne Berücksichtigung, können Sie nicht zwischen der Standard-Initialisierung null und ein vom Benutzer eingestellten null durch sprach Design

unterscheiden

Sie benötigen eine Art Status, der verfolgt, ob ein Feld von einem Setter aufgerufen wurde. Wenn es von einem Setter nicht zugegriffen wurde und Null ist, ignoriere es.

Eine Möglichkeit, dies zu tun, ist Jackson Filter für die verschiedenen Bedingungen für die Serialisierung ein Feld während der Laufzeit (Ihr Zustand ist, dass Ihre Setter-access-Zustand zeigt an, dass das Feld gesetzt wurde von einem Benutzer)

definieren können

http://www.baeldung.com/jackson-serialize-field-custom-criteria