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>