Jackson与模块一起使用jackson-dataformat-xml,我可以同时序列POJO化JSON和XML. 我的对象中有一些字段(xml 属性)应该只被序列化为XML而不是JSON. 如果我应用@JsonIgnore注释,即使使用@JsonXMLProperty.
我怎样才能只忽略JSON而不是忽略字段XML?
Jackson与模块一起使用jackson-dataformat-xml,我可以同时序列POJO化JSON和XML. 我的对象中有一些字段(xml 属性)应该只被序列化为XML而不是JSON. 如果我应用@JsonIgnore注释,即使使用@JsonXMLProperty.
我怎样才能只忽略JSON而不是忽略字段XML?
您应该使用混入功能。例如,假设您的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>