XML을 표시하는 방법에는 두 가지가 있다.
-
Child Elements
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <person> <name>John</name> <job>Developer</job> <department> <name>Dev</name> <headCount>20</headCount> </department> </person>
-
Attributes
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <person name="John" job="Developer"> <department name="Dev" headCount="20" /> </person>
Java에서 Object를 XML로 변환하기 위해서는 이런 방식으로 할 수 있다.
// Person.java
@Getter
@AllArgsConstructor
public class Person {
private String name;
private String job;
private Department department;
@Getter
@AllArgsConstructor
public static class Department {
private String name;
private Integer headCount;
}
}
테스트 파일
void xmlTest() throws JsonProcessingException {
XmlMapper xmlMapper = new XmlMapper();
Department department = new Department("Dev", 20);
Person person = new Person("John", "Developer", department);
String personXml = xmlMapper.writeValueAsString(person);
System.out.println(personXml);
}
출력 결과
<Person>
<name>John</name>
<job>Developer</job>
<department>
<name>Dev</name>
<headCount>20</headCount>
</department>
</Person>
기본적으로 Child Elements 방식으로 출력한다.
Attributes 방식으로 출력하기 위해서는 Class에서 각 property에 @JacksonXmlProperty(isAttribute = true)
붙여주면 된다.
// Person.java
@Getter
@AllArgsConstructor
public class Person {
@JacksonXmlProperty(isAttribute = true)
private String name;
@JacksonXmlProperty(isAttribute = true)
private String job;
private Department department;
@Getter
@AllArgsConstructor
public static class Department {
@JacksonXmlProperty(isAttribute = true)
private String name;
@JacksonXmlProperty(isAttribute = true)
private Integer headCount;
}
}
그러면 Annotation을 붙인 항목들은 Attributes 방식으로 표현된다.
<Person name="John">
<job>Developer</job>
<department name="Dev" headCount="20"/>
</Person>