我喜欢用Jackson将一个空的String成员("")反序列化为null。反序列化功能" ACCEPT_EMPTY_STRING_AS_NULL_OBJECT"遗憾的是,不能使用它(见link)。
@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 String进行反序列化后,字符串成员" link"和"图像"应该为null而不是""。
{"id":37,"name":"Life","image":"","link":"","description":null}
我正在寻找一种编写自己的反序列化器的方法,可以用于POJO的String成员。有没有办法实现这个目标?我使用的是更快的Jackson 2.6.0。
答案 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;
}
}
将自定义反序列化程序注册到Supplier类
@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);