2019. 11. 25. 11:22ㆍ🔴 Spring
JAXB2 API이용해서 XML처리
: 자바객체 & XML 사이의 변환처리를 해주는 API
XML → @XmlRootElement 객체 또는 @XmlType 객체로 읽기
@XmlRootElement 적용 객체 → XML로 쓰기
@XmlAccessorType : Java Bean이나 field를 serialized한다 = 자바객체 → xml으로 설정
@XmlAccessorType(XmlAccessType.FIELD) → 클래스 앞에 사용하면 xml으로 만들 범위 지정함
= 필드는 모두 추출한다!
<주요 JAXB Annotation>
@XmlAccessorType : XML 데이터를 어떤 방법으로 맵핑할지를 선언해줄 수 있는 annotaion으로 NONE을 사용할 시 XmlElement로 annotate된 객체만 맵핑시킵니다.
@XmlRootElement : Class에 사용하는 annotation으로 해당 클래스가 XML 특정 노드의 루트라는 것을 뜻합니다. name을 사용하여 root를 명시할 수 있습니다.
@XmlElement : 변수에 사용하는 annotaion으로 해당 변수가 XML의 노드임을 뜻 합니다. XmlRootElement로 선언된 영역에서 해당 변수 이름과 맵핑하려는 XML 데이터 노드 이름이 같다면 굳이 명시해주지 않아도 됩니다.
@XmlElementWrapper : 해당 변수가 특정 노드들을 감싸고 있는 Wrapper란 것을 명시해주는 annotaion 입니다.
출처 : https://skibis.tistory.com/338
예제
<GuestMessage.java>
package com.bitcamp.mvc.domain;
import java.util.Date;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="",propOrder = {"id","message","createTime"}) -> xml 읽기
// propOrder : 삽입하는 순서 지켜야함!!
public class GuestMessage {
private Integer id;
private String message;
private Date createTime;
public GuestMessage(Integer id, String message, Date createTime) {
this.id = id;
this.message = message;
this.createTime = createTime;
}
public GuestMessage() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
<GuestMessageList.java>
package com.bitcamp.mvc.domain;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "message-list") -> XML으로 씀
<message-list> ... </message-list> 생성됨
public class GuestMessageList {
@XmlElement(name = "message")
private List<GuestMessage> messages; -> 반환타입 지정해줌 (GuestMessage)
<message-list> <message> ... </message> </message-list>
// 생성자
public GuestMessageList() {
}
public GuestMessageList(List<GuestMessage> messages) {
this.messages = messages;
}
// Getter
public List<GuestMessage> getMessages() {
return messages;
}
}
<GuestListController.java>
package com.bitcamp.mvc;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.bitcamp.mvc.domain.GuestMessage;
import com.bitcamp.mvc.domain.GuestMessageList;
@Controller
public class GuestListController {
@RequestMapping("/guest/xmlList.xml")
@ResponseBody
public GuestMessageList xmlList() {
return getmessageList(); -> GuestMessageList로 응답
}
private GuestMessageList getmessageList() { -> 정보 넣어주기
List<GuestMessage> message = new ArrayList<GuestMessage>();
message.add(new GuestMessage(1, "안녕하세요", new Date()));
message.add(new GuestMessage(2, "반갑습니다", new Date()));
message.add(new GuestMessage(3, "또만나요", new Date()));
return new GuestMessageList(message);
}
}
결과창:
Content-Type: text/html;charset=UTF-8 → Content-Type: application/json;charset=UTF-8
'🔴 Spring' 카테고리의 다른 글
RESTful(5) - @JsonIgnore (0) | 2019.11.26 |
---|---|
RESTful(4) - @RestController 사용하기 (단순문자열, 객체타입, List타입, Map타입) (0) | 2019.11.26 |
RESTful(2) - XML/JSON 변환처리(@RequestBody, @ResponseBody, HttpMessageConverter) (0) | 2019.11.25 |
RESTful(1) - @PathVariable 사용하기 (0) | 2019.11.25 |
MyBatis를 이용한 DAO구현 (0) | 2019.11.20 |