2016-04-06 34 views
5

Wiem, że istnieje wiele pytań dotyczących pomijania pól z wartością pustą podczas serializowania obiektów do JSON. Chcę pomijać/ignorować pola z wartościami null podczas deserializacji JSON do obiektu.Zignoruj ​​puste pola podczas odraczania JSON z Gsonem lub Jacksonem

Rozważmy klasę

public class User { 
    Long id = 42L; 
    String name = "John"; 
} 

i ciąg JSON

{"id":1,"name":null} 

Podczas

User user = gson.fromJson(json, User.class) 

Chcę user.id być '1' i user.name być 'John'.

Czy to możliwe z Gsonem lub Jacksonem w sposób ogólny (bez specjalnych numerów TypeAdapter lub podobnych)?

+0

W jaki sposób user.name będzie "John". jeśli przykład json ma "name": null? Pytasz, czy może pominąć wartości Null w Json i nie przesłonić wartości domyślnej w klasie? –

+0

@jeffporter Tak, to jest dokładnie to pytanie. – FWeigl

+0

Czy znalazłeś dobre rozwiązanie? – jayeffkay

Odpowiedz

0

Aby pominąć użycie TypeAdapters, chciałbym, aby POJO wykonał zerową kontrolę po wywołaniu metody ustawiającej.

Albo spojrzeć na

@JsonInclude(value = Include.NON_NULL) 

Adnotacja musi być na poziomie klasy, a nie na poziomie metody.

@JsonInclude(Include.NON_NULL) //or Include.NON_EMPTY, if that fits your use case 
public static class RequestPojo { 
    ... 
} 

Do Deserialise można używać na poziomie klasy.

@JsonIgnoreProperties (ignoreUnknown = true)

+3

@JsonInclude (value = Include.NON_NULL) wydaje się działać tylko podczas serializacji, a nie podczas deserializacji. – FWeigl

0

co zrobiłem w moim przypadku jest ustawienie wartości domyślnej na getter

public class User { 
    private Long id = 42L; 
    private String name = "John"; 

    public getName(){ 
     //You can check other conditions 
     return name == null? "John" : name; 
    } 
} 

Chyba będzie to ból dla wielu dziedzinach, ale to działa w prostym przypadku mniejszej liczby pól

0

Choć nie jest to najbardziej zwięzły rozwiązanie, z Jacksonem można obsługiwać ustawiania właściwości siebie ze zwyczajem @JsonCreator:

public class User { 
    Long id = 42L; 
    String name = "John"; 

    @JsonCreator 
    static User ofNullablesAsOptionals(
      @JsonProperty("id") Long id, 
      @JsonProperty("name") String name) { 
     if (id != null) this.id = id; 
     if (name != null) this.name = name; 
    } 
}