2014-04-07 37 views
1

使用Jackson與jackson-dataformat-xml模塊,我可以將POJO序列化爲json和xml。在我的對象中有幾個字段(xml屬性)應該只被序列化爲XML而不是json。如果我應用@JsonIgnore註釋,即使使用@JsonXMLProperty,該字段也會被完全忽略。只在json中忽略字段而在jackson-dataformat-xml中沒有xml

我該如何忽略json中的字段而不是xml?

回答

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>