2016-02-04 308 views
0

我喜欢用Jackson将空字符串成员(“”)反序列化为null。可能不会使用反序列化功能“ACCEPT_EMPTY_STRING_AS_NULL_OBJECT”(请参阅​​link)。Jackson - 将空字符串成员反序列化为空

@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字符串后,字符串成员“link”和“image”应该是null而不是“”。

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

我正在寻找一种方式来写一个自己的解串器可用于POJO的字符串成员。有没有办法做到这一点?我正在使用更快的杰克逊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; 
    } 
} 

注册与供应商类

@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和他们的字符串成员?我正在寻找像添加一个通用的“反序列化器”的对象映射器[链接](http://apieceofmycode.blogspot.ch/2015/05/json-jackson-custom-deserializer-to.html),但我没有好运,让它为我的问题工作。 – megloff

相关问题