#経緯
お察しください
#準備
pomに下記を追加
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.8</version>
</dependency>
#詳細な使い方
http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/
#もろもろのクラス準備
###前提
・Beanのデータを作るときにLombokの@Builderを使いました(本記事では触れてません)
https://projectlombok.org/
###Bean
TestBean.java
@Data
@Builder
@JacksonXmlRootElement(localName = "top_element")
public class TestBean implements Serializable {
// isAttribute = trueを付与すると属性になる
@JacksonXmlProperty(localName = "id", isAttribute = true)
private String topElement;
@JacksonXmlProperty(localName = "test_field")
private String testField;
// ネストしたBeanも書ける
@JacksonXmlProperty(localName = "test_inner_bean")
private TestInnerBean testInnerBean;
// Beanのリストをフィールドに持てる
@JacksonXmlElementWrapper(localName = "dtls")
@JacksonXmlProperty(localName = "dtl")
private List<DtlsInnerDto> dtlsInnerDto;
###ネストするBean
TestInnerBean.java
@SuppressWarnings("serial")
@Data
@Builder
public class TestInnerBean implements Serializable {
@JacksonXmlProperty(localName = "inner_field_one")
private String innerFieldOne;
@JacksonXmlProperty(localName = "inner_field_two")
private String innerFieldTwo;
}
###ネストするBeanのリスト
DtlsInnerDto.java
@SuppressWarnings("serial")
@Data
@Builder
public class DtlsInnerDto implements Serializeble {
@JacksonXmlProperty(localName = "dtl_item")
private String dtlItem;
}
#Bean→XML変換処理のコード
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
String xml = new XmlMapper().writeValueAsString(Bean組み立て処理());
#変換結果
<top_element id="xxx">
<test_field>xxx</test_field>
<test_inner_bean>
<inner_field_one>xxx</inner_field_one>
<inner_field_two>xxx</inner_field_two>
</test_inner_bean>
<dtls>
<dtl>xxx</dtl>
<dtl>yyy</dtl>
<dtl>zzz</dtl>
</dtls>
</top_element>
#XML→Bean変換処理のコード
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
Beanクラス bean = new XmlMapper().readValue(xml文字列, Beanクラス.class)
##メモ
- リストを表現したいとき http://labs.opentone.co.jp/?p=6634