티스토리 뷰

공장 (factory)/- Programming..

[Spring] RestTemplate를 이용한 RESTFul API XML 처리

공부하는 나부랭이, 무중력고기 2016.08.31 20:00

   예전에는 API를 통해 데이터 하나를 받아오려면 Apache의 HttpClient를 이용해서 긴긴 코딩을 해줬어야 했다. 이제는 Spring의 RestTemplate을 사용하면 단 몇 줄로 코딩이 끝난다.


   다음은 URL로 요청해서 받아오는 XML 데이터를 처리하는 예제다.



   Controller

@Controller
@RequestMapping({"/member"})
public class MemberController {

	@RequestMapping({"/memberList.do"})
	public String memberList(Model model) {
		// Xml데이터를 response받을 API주소
		String uri = "API주소";
		
		// RestTemplate 생성
		RestTemplate restTemplate = new RestTemplate();
		
		// 오브젝트로 결과값 받아오기
		MemberListDTO memberList = restTemplate.getForObject(uri, MemberListDTO.class);
		
		// 회원 정보 리스트
		List result = memberList.getMemberInfo();
		
		model.addAttribute("result", result);
		
		return "memberList";
	}
	
}

   RestTemplate을 생성하고 오브젝트로 결과값 받아오는 저 두 줄이 전부다.


   나머지는 XML 데이터 처리다.



   만약 받아오는 XML 데이터의 구조가 아래와 같다고 가정하면,


	
		
			bluewater
			이순신
			27
			
				변씨
				이요
			
		
		
			blackgun
			안중근
			31
			
				백천조
				안준생
			
		
	


   위의 XML 데이터를 핸들링하기 위해 아래의 클래스들이 필요하다.



   MemberListDTO

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "member_list")
public class MemberListDTO {

	private List memberInfo;
	
	@XmlElementWrapper(name="member_data")
	@XmlElement(name="m_info")
	public List getMemberInfo() {
		return memberInfo;
	}

	public void setMemberInfo(List memberInfo) {
		this.memberInfo = memberInfo;
	}

}



   MemberDTO

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="m_info")
@XmlAccessorType(XmlAccessType.FIELD)
public class MemberDTO {

	@XmlAttribute(name = "memberno")
	private String memberno;

	@XmlElement(name = "id")
	private String id;
	
	@XmlElement(name = "name")
	private String name;
	
	@XmlElement(name = "age")
	private String age;

	@XmlElement(name="family")
	FamilyDTO family;

	
	public String getMemberno() {
		return memberno;
	}

	public void setMemberno(String memberno) {
		this.memberno = memberno;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public FamilyDTO getViewfiles() {
		return viewfiles;
	}

	public void setFamily(FamilyDTO family) {
		this.family = family;
	}
	
}


   

   FamilyDTO

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name="family")
@XmlAccessorType(XmlAccessType.FIELD)
public class FamilyDTO {

	@XmlElement(name = "wife")
	String wife;
	
	@XmlElement(name = "son")
	String son;
	
	
	public String getWife() {
		return wife;
	}

	public void setWife(String wife) {
		this.wife = wife;
	}

	public String getSon() {
		return son;
	}

	public void setSon(String son) {
		this.son = son;
	}
	
}



   컨트롤러 단에 코드가 늘어나지 않아서 좋긴 한데, XML의 구조가 복잡해지면 DTO 클래스들이 늘어나는 번잡함이 있다.


   뭔가 더 좋은 방법이 있을지도... 



저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼