【问题标题】:Ignore fields only in json but not xml with jackson-dataformat-xml仅在 json 中忽略字段,但在使用 jackson-dataformat-xml 时不忽略 xml
【发布时间】:2014-04-07 03:45:17
【问题描述】:
将Jackson 与jackson-dataformat-xml 模块一起使用,我可以将POJO 序列化为JSON 和XML。我的对象中有一些字段(xml 属性)应该只序列化为XML,而不是JSON。如果我应用@JsonIgnore 注释,即使使用@JsonXMLProperty,该字段也会被完全忽略。
如何仅忽略 JSON 而不是 XML 中的字段?
【问题讨论】:
标签:
java
json
jackson
json-serialization
jackson-modules
【解决方案1】:
您应该使用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>