こんにちは、Jackson-dataformat XMLMapperを使用してJavaからXMLを作成する必要があります。XMLは次のようになります
<Customer>
<id>1</id>
<name>Mighty Pulpo</name>
<addresses>
<city>austin</city>
<state>TX</state>
</addresses>
<addresses>
<city>Hong Kong</city>
<state>Hong Kong</state>
</addresses>
</Customer>
しかし、私は常に追加の "<addresses> </ addresses>"タグのようにそれを取得します。
<Customer>
<id>1</id>
<name>Mighty Pulpo</name>
<addresses>
<addresses>
<city>austin</city>
<state>TX</state>
</addresses>
<addresses>
<city>Hong Kong</city>
<state>Hong Kong</state>
</addresses>
<addresses>
</Customer>
以下のコードを使用してXMLを作成しています
JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
XmlMapper mapper = new XmlMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(jaxbAnnotationModule);
mapper.registerModule(new GuavaModule());
String xml = mapper.writeValueAsString(customer);
System.out.println(xml);
誰か助けてもらえますか?余分なタグを削除するにはどうすればよいですか。私は@XmlElementを使用しようとしましたが、助けにはなりません。 TIA !!
以下のコードを試してください
@JacksonXmlRootElement(localName = "customer")
class Customer {
@JacksonXmlProperty(localName = "id")
private int id;
@JacksonXmlProperty(localName = "name")
private String name;
@JacksonXmlProperty(localName = "addresses")
@JacksonXmlElementWrapper(useWrapping = false)
private Address[] address;
//getters, setters, toString
}
class Address {
@JacksonXmlProperty(localName = "city")
private String city;
@JacksonXmlProperty(localName = "state")
private String state;
// getter/setter
}
コード内のどこでも注釈を処理したくない場合は、この設定によりデフォルトのラップ動作が変更されます。
XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);
ManojPの答えに追加するだけですが、変数の宣言に@JacksonXmlElementWrapper(useWrapping = false)
を追加しても機能しない場合(これは私の場合です)、getterメソッドに追加するとうまくいきます。