2

Jackson与模块一起使用jackson-dataformat-xml,我可以同时序列POJOJSONXML. 我的对象中有一些字段(xml 属性)应该只被序列化为XML而不是JSON. 如果我应用@JsonIgnore注释,即使使用@JsonXMLProperty.

我怎样才能只忽略JSON而不是忽略字段XML

4

1 回答 1

2

您应该使用混入功能。例如,假设您的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>
于 2014-04-07T08:08:12.267 回答