Jackson - 将空字符串成员反序列化为空
问题描述:
我喜欢用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。
答
在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);
感谢您的自定义解串器,但可以这样做更通用的?即为我所有的POJO和他们的字符串成员?我正在寻找像添加一个通用的“反序列化器”的对象映射器[链接](http://apieceofmycode.blogspot.ch/2015/05/json-jackson-custom-deserializer-to.html),但我没有好运,让它为我的问题工作。 – megloff