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);
	}
}

 

 

 

출력화면이다.