2016-01-27 9 views
6

Powiedzmy mam klasa tak:Jackson. Deserializowania właściwości brakujące jako pusty Opcjonalne

public static class Test { 

     private Optional<String> something; 

     public Optional<String> getSomething() { 
      return something; 
     } 

     public void setSomething(Optional<String> something) { 
      this.something = something; 
     } 

    } 

Gdybym deserializowania ten JSON, otrzymuję pusty Opcjonalnie:

{"something":null} 

Ale jeśli nieruchomość brakuje (w w tym przypadku po prostu pusty JSON), otrzymuję wartość null zamiast Opcjonalnie. Oczywiście mogłem oczywiście zainicjować pola, ale myślę, że lepiej byłoby mieć jeden mechanizm dla zerowych i brakujących właściwości. Czy istnieje sposób, aby jackson deserializuje brakujące właściwości jako puste Opcjonalne?

+0

Wygląda na to wygodny sposób rozróżniania 'null' i wartości nieobecnego dla mnie –

Odpowiedz

3

Opcjonalnie tak naprawdę nie ma być używane jako pole, ale bardziej jako wartość zwracana. Dlaczego nie ma:

public static class Test { 
    private String something; 
    public Optional<String> getSomething() { 
    return Optional.ofNullable(something); 
    } 
    public void setSomething(String something) { 
    this.something = something; 
    } 
} 
+1

wyrocznię nie sądzi, że http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html – AdamSkywalker

+1

@AdamSkywalker zależy od źródła od Oracle - ludzie, którzy pracowali nad API [wydają się myśleć inaczej] (http://stackoverflow.com/a/23464794/829571). – assylias

+0

ok, wydaje się legit – AdamSkywalker

0

rozwiązania bez pobierające/ustawiające, upewnij something się zainicjowany tak:

public Optional<String> something = Optional.empty();