2016-02-04 4 views
0

Мне нравится десериализовать с Jackson пустой элемент String ("") на null. Для этого, к сожалению, не используется функция десериализации «ACCEPT_EMPTY_STRING_AS_NULL_OBJECT» (см. link).Jackson - Deserialize empty String Member to null

@JsonIgnoreProperties(ignoreUnknown = true) 
@JsonInclude(Include.NON_NULL) 
public class Supplier { 
    private Integer id; 
    private String name; 
    private String image; 
    private String link; 
    private String description; 
} 

Таким образом, после десериализации следующей JSON струны членов строки «ссылка» и «образом» должно быть нулевыми, а не «».

{"id":37,"name":"Life","image":"","link":"","description":null} 

Я ищу способ, чтобы написать собственные десериализации, который может быть использован для членов тетивы POJO. Есть ли способ достичь этого? Я использую более быстрый Jackson 2.6.0.

ответ

0

Пользовательский десериализатор может быть выполнен следующим образом в Jackson 2.6.0.

public class SupplierDeserializer extends JsonDeserializer<Supplier> { 

    @Override 
    public Supplier deserialize(JsonParser jp, DeserializationContext context) throws IOException, JsonProcessingException { 
     Supplier sup = new Supplier(); 

     JsonNode node = jp.readValueAsTree(); 

     sup.setId(node.get("id").asInt()); 

     sup.setDescription(node.get("description").asText()); 

     String image = node.get("image").asText(); 
     if("".equals(image)) { 
      image = null; 
     } 
     sup.setImage(image); 

     String link = node.get("link").asText(); 
     if("".equals(link)) { 
      link = null; 
     } 
     sup.setLink(link); 

     sup.setName(node.get("name").asText()); 

     return sup; 
    } 
} 

Регистрация настраиваемое deserialiser с классом поставщика

@JsonDeserialize(using = SupplierDeserializer.class) 
public class Supplier { 
    private Integer id; 
    private String name; 
    private String image; 
    private String link; 
    private String description; 

    // getters and setters 
} 

вызова класс ObjectMapper для анализа данных в формате JSON

String jsonData = "{\"id\":37,\"name\":\"Life\",\"image\":\"\",\"link\":\"\",\"description\":null}"; 

Supplier sup = new ObjectMapper().readValue(jsonData, Supplier.class); 
+0

Спасибо, но это может быть сделано более общий характер? т. е. для всех моих POJO, и они строят элементы? Я ищу что-то вроде добавления общего «десериализатора» к объекту mapper [link] (http://apieceofmycode.blogspot.ch/2015/05/json-jackson-custom-deserializer-to.html), но у меня не было удача заставить его работать для моей проблемы. – megloff