Jackson으로 XML을 파싱하기 위해서 다음의 dependency를 추가합니다. Jackson이 이미 dependency로 추가되어 있다면 버전 충돌이 발생하지 않도록 버전을 맞추시기 바랍니다.
코드 블럭 |
---|
language | xml |
---|
linenumbers | true |
---|
|
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.2</version>
</dependency> |
XML이 있는 경우 다음과 같이 XmlMapper로 파싱할 수 있습니다. 만약에 unmarshal할 Type을 모르겠다면 Map으로 하시기 바랍니다. 물론 Map에서 값을 꺼내기 위해서 코드를 많이 작성해야 합니다. Map의 경우 Key Value 형식으로 데이터가 저장되므로 배열을 넣는 경우 문제가 발생할 수 있으므로 POJO(Plain Old Java Object)로 매핑하는 것을 권장합니다.
코드 블럭 |
---|
language | java |
---|
linenumbers | true |
---|
|
String xml = "<user><name>BYOUNG GON, KIM</name><username>fharenheit</username></user>";
XmlMapper mapper = new XmlMapper();
User user = mapper.readValue(xml, User.class); |
...
코드 블럭 |
---|
language | java |
---|
linenumbers | true |
---|
|
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
@JacksonXmlRootElement(namespace = "http://s3.amazonaws.com/doc/2006-03-01/") → ROOT 노드인 경우 사용하도록 함
public class AccessControlPolicy {
@JacksonXmlProperty(localName = "Owner") → XML에서는 <Owner>이지만 Java에서는 owner이므로 명시적으로 name을 정의함
protected Owner owner;
@JacksonXmlProperty(localName = "AccessControlList")
protected AccessControlList accessControlList;
public Owner getOwner() {
return owner;
}
public void setOwner(Owner value) {
this.owner = value;
}
public AccessControlList getAccessControlList() {
return accessControlList;
}
public void setAccessControlList(AccessControlList value) {
this.accessControlList = value;
}
} |
...
코드 블럭 |
---|
language | java |
---|
linenumbers | true |
---|
|
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.util.ArrayList;
import java.util.List;
public class AccessControlList {
@JacksonXmlElementWrapper(useWrapping = false) → List형인 경우 지정하도록 함
@JacksonXmlProperty(localName = "Grant")
protected List<Grant> grant;
public List<Grant> getGrant() {
if (grant == null) {
grant = new ArrayList<Grant>();
}
return this.grant;
}
@Override
public String toString() {
return "AccessControlList{" +
"grant=" + grant +
'}';
}
}
|