1
使用Jackson與jackson-dataformat-xml模塊,我可以將POJO序列化爲json和xml。在我的對象中有幾個字段(xml屬性)應該只被序列化爲XML而不是json。如果我應用@JsonIgnore註釋,即使使用@JsonXMLProperty,該字段也會被完全忽略。只在json中忽略字段而在jackson-dataformat-xml中沒有xml
我該如何忽略json中的字段而不是xml?
使用Jackson與jackson-dataformat-xml模塊,我可以將POJO序列化爲json和xml。在我的對象中有幾個字段(xml屬性)應該只被序列化爲XML而不是json。如果我應用@JsonIgnore註釋,即使使用@JsonXMLProperty,該字段也會被完全忽略。只在json中忽略字段而在jackson-dataformat-xml中沒有xml
我該如何忽略json中的字段而不是xml?
您應該使用Mix-in功能。例如,假設你的POJO
類看起來是這樣的:現在
class Pojo {
private long id;
private String xmlOnlyProperty;
// getters, setters
}
,您可以定義註釋使用Mix-in
接口的每個屬性。對於JSON
它看起來象下面這樣:
interface PojoJsonMixIn {
@JsonIgnore
String getXmlOnlyProperty();
}
對於XML
它看起來象下面這樣:
interface PojoXmlMixIn {
@JacksonXmlProperty(isAttribute = true)
String getXmlOnlyProperty();
}
最後,例如如何使用Mix-in
功能:
Pojo pojo = new Pojo();
pojo.setId(12);
pojo.setXmlOnlyProperty("XML attribute");
System.out.println("JSON");
ObjectMapper mapper = new ObjectMapper();
mapper.addMixInAnnotations(Pojo.class, PojoJsonMixIn.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pojo));
System.out.println("XML");
ObjectMapper xmlMapper = new XmlMapper();
xmlMapper.addMixInAnnotations(Pojo.class, PojoXmlMixIn.class);
System.out.println(xmlMapper.writeValueAsString(pojo));
上面的程序打印:
JSON
{
"id" : 12
}
XML
<Pojo xmlns="" xmlOnlyProperty="XML attribute"><id>12</id></Pojo>