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