웹 & 프레임워크

JSON과 XML을 이용한 비동기통신

늘근이 2014. 5. 8. 16:52

Spring framework를 이용하면 json과 xml을 이용해 이전에 해왔던것처럼 쉽게 비동기통신을 할수있다.

기존의 방식은 빈 깡통을 하나 만들어주고 거기다 서블릿에서 포워딩했고, jQuery의 getJSON등의 함수를 통해 불러왔다면, jQuery쪽의 함수는 기존의 방식 그대로 유지하면서도, 굳이 JSON이나 XML빈깡통을 만들지 않고 바로 스프링이 보내버리게 할수 있는것이다.


일단 리턴타입을 해쉬맵이나 리스트 아니면 객체타입으로 반환할수 있는데, 그 깊이가 차이가 날수있다. (여러개의 데이터는 list<T>타입으로 리턴타입을 선언해주면 될것이다.)


다음은 JSON타입을 반환하는 예제이다. 서블릿에서 깡통 JSON.jsp등으로 포워딩하는게 아니라 바로 보내버리고 있다.


 //jackson-mapper기본라이브러리 이놈이 json형식으로 보내줌
 //core library도 JDK안에 있음
 @RequestMapping("/getDirector.do")
 @ResponseBody
 public HashMap getDirector(String id) {
  HashMap map = new HashMap();
  Director director = directorService.findDirectorById(id);
  if(director != null){
  map.put("status", true);
  map.put("director", director);
  }else{
   map.put("status", false);
  }
  return map;
 }

//이 뒤의 태그는 버그!



다음은 xml타입을 반환하는 예제이다. 마찬가지로 *.xml파일로 보내거나 하지 않고 바로 스프링 지가 만들어서 보내고 있다. 대신 앞쪽과의 다른점은 리턴타입이 그냥 객체고, status에 대한 boolean값이 없기 때문에 코드가 굉장히 간단해진것이다. 


 //@XmlRootElement를 VO에 붙여주어야함
 @RequestMapping("/getDirectorXml.do")
 @ResponseBody
 public Director getDirectorXML(String id){
  Director director = directorService.findDirectorById(id);
  return director;
 }


대신 xml은 VO(객체) 클래스 위쪽에 무언가 추가해주어야 하는데


@XmlRootElement 


어노테이션을 붙여주어야 한다는것이다.


이제 Jquery를 이용한 비동기 통신만 코드를 추가하면 된다