티스토리 뷰

공장 (factory)/- Programming..

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

공부하는 나부랭이, 무중력고기 2016. 8. 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 클래스들이 늘어나는 번잡함이 있다.


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



댓글
  • 밀깔 세상에 녹용이의 흔적을 이렇게 마주칠 줄이야 ㅎㅎㅎ
    벌써 한참전에 정리했던 내용이니 지금은 답을 찾았으려나?

    xml 구조가 복잡하면 그에 맞는 POJO가 복잡해 지건 어쩔수 없는 문제인것 같아.
    다만 코드 생산성을 위해 lombok을 쓰고 있지.

    그나저나...내코드는 String 으로 받아서 JAXB 언마샬을 걸면 되는데 restTemplate으로는 언마샬을 못하는건 왜일까.
    뭘 잘못했을까나... ;ㅁ;
    2020.03.28 13:54
  • BlogIcon 공부하는 나부랭이, 무중력고기 ㅋㅋㅋㅋㅋㅋㅋㅋ 밀깔이를 내 블로그 댓글에서 보게 되다닠ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
    무려 4년 전 글에 ㅋㅋㅋㅋㅋㅋㅋ반갑다 친구야 ㅋㅋㅋㅋ

    lombok 사용해도 귀찮은 건 매한가지더라.
    음 언마샬은 확인해줄 수가 없네. RestTemplate 너무 오래 전에 써봐서 ㅎㅎ

    암튼 반갑~!
    2020.04.08 15:27 신고
댓글쓰기 폼
Total
1,507,903
Today
823
Yesterday
927
«   2020/04   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함