Spring/공부
[Spring MVC] XML을 통한 API 다루기
하루인생
2021. 2. 19. 12:43
서비스나 데이터를 HTTP기반의 API형태로 제공하는 곳이 많다.
API는 XML이나 JSON형태로 제공한다.
지난번에 JSON으로 하는 방법을 알아봤는데 이번에 XML을 이용한 방법을 알아보겠다.
@EnableWebMvc 애노테이션을 사용하면 다양한 HttpMessageConverter 클래스를 제공받을 수 있다.
이 중 Jaxb2RootElementHttpMessageConverter 클래스를 사용하여 XML처리를 할 수 있다.
@XmlRootElement : 루트 태그를 설정한다. 여기서는 <message-list> 가 루트 태그가 된다.
@XmlElement : set메소드에 이 애노테이션을 설정하면 자동으로 반인딩 된다.
..
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "message-list")
public class GuestMessageList {
@XmlElement(name = "message")
private List<GuestMessage> messages;
public GuestMessageList() {
// TODO Auto-generated constructor stub
}
public GuestMessageList(List<GuestMessage> messages) {
this.messages = messages;
}
public List<GuestMessage> getMessages(){
return messages;
}
}
@XmlType에 propOrder는 태그의 순서를 정할 수 있다.
여기서는 <id>, <message>, <creationTime> 태그 순으로 정렬된다.
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "",propOrder = {"id","message","creationTime"})
public class GuestMessage {
private Integer id;
private String message;
private Date creationTime;
public GuestMessage(Integer id, String message, Date creationTime) {
this.id = id;
this.message = message;
this.creationTime = creationTime;
}
public Integer getId() {
return id;
}
public String getMessage() {
return message;
}
public Date getCreationTime() {
return creationTime;
}
}
테스트를 위한 컨트롤러를 작성했다.
body를 출력할 예정이므로 @ResponseBody 어노테이션을 설정했다.
ArrayList말고 Arrays.asList()를 사용해도 된다.
Arrays.asList()에 대해 나중에 알아 보겠다.
...
@Controller
public class GuestMessageController {
@RequestMapping(value = "/guestmesssage/list.xml")
@ResponseBody
public GuestMessageList listXml() {
return getMessageList();
}
private GuestMessageList getMessageList() {
List<GuestMessage> messages = new ArrayList<GuestMessage>();
messages.add(new GuestMessage(1, "메시지1", new Date()));
messages.add(new GuestMessage(2, "메시지2", new Date()));
messages.add(new GuestMessage(3, "메시지3", new Date()));
// asList는 위 ArrayList랑은 다름
// List<GuestMessage> messages = Arrays.asList(
// new GuestMessage(1, "메시지1", new Date()),
// new GuestMessage(2, "메시지2", new Date()),
// new GuestMessage(3, "메시지3", new Date())
// );
return new GuestMessageList(messages);
}
}
출력화면이다.