2

モジュールを使用Jacksonすると、と の両方にシリアル化できます。私のオブジェクトには、シリアル化するだけでシリアル化する必要がないいくつかのフィールド (xml 属性)があります。アノテーションを適用すると、フィールドは であっても完全に無視されます。jackson-dataformat-xmlPOJOJSONXMLXMLJSON@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 に答える