티스토리 뷰
예전에는 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); // 회원 정보 리스트 Listresult = 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 ListmemberInfo; @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 클래스들이 늘어나는 번잡함이 있다.
뭔가 더 좋은 방법이 있을지도...
'공장 (factory) > - Programming..' 카테고리의 다른 글
[Java] 쿠키(Cookie) 생성/조회/삭제 (0) | 2017.05.27 |
---|---|
[Spring] 공통 메시지 처리 (ReloadableResourceBundleMessageSource) (1) | 2017.05.24 |
[JavaFX/Eclipse] JavaFX 기본 예제. (3) | 2016.06.01 |
[Java/JSP] 페이징 처리 예제. (5) | 2015.08.26 |
[MongoDB] 윈도우에 설치하기 (0) | 2015.08.11 |
댓글