2013년 4월 3일 수요일

Spring3를 이용하여 RESTFul web service 생성하기 - JSON

Restful 웹 서비스 Build

오늘은 Android App을 개발하기 위해서 Application이 아닌 Server에 대한 학습을 했다.
수많은 Application 중에 단독으로 수행하는 App들도 있지만 대부분은 Server와 통신을 통해 데이터를 주고 받아 서비스하는 것이 많다.

Spring3에서 Restful 웹 서비스를 구현하기 위해서는 HttpMessageConverter를 구성해야 한다. HttpMessageConverter 인스턴스를 사용자가 정의하여 오브젝트를 서로 다른 매체로 변환하여 사용할 수 있다. 매체 유형으로는 JSON, ATOM 그리고 XML이 있다.

첫 번째 시간에는 JSON으로 변환하는 것을 공부하려고 한다.

JSON

아래는 간단한 예제다. JSON은 작은 데이터를 Server와 Client 간에 주고 받기에 쉽다. 여기에서 Client는 Application이다.

==> spring-servlet.xml에서 HttpMessageConverter 구성
--------------------------------------------------------------------
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
   <property name="messageConverters">
       <list>
           <ref bean="jsonConverter" />
           <ref bean="marshallingConverter" />
           <ref bean="atomConverter" />
       </list>
   </property>
</bean>

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
   <property name="supportedMediaTypes" value="application/json" />
</bean>
--------------------------------------------------------------------

위의 내용에서 MappingJacksonHttpMessageConverter는 오브젝트를 JSON으로 변환하고 JSON 유형을 그 반대로 변환하는 경우에 사용된다

==> TestController에서 정의된 JSON 요청 처리
--------------------------------------------------------------------
@RequestMapping(method=RequestMethod.GET, value="/user/{id}", headers="Accept=application/json")
public @ResponseBody User getUser(@PathVariable String id) {
    User user = userDao.get(Long.parseLong(id));
    return user;
}
           
@RequestMapping(method=RequestMethod.GET, value="/users", headers="Accept=application/json")
public @ResponseBody UserList getAllUsers() {
     List<User> users = userDao.getAll();
     UserList userList = new UserList(users)
     return userList;
}
--------------------------------------------------------------------

@ResponseBody Annotation은 리턴 Object(User 또는 UserList)를 응답하여 정보를 전달하는 데 사용되고, 이것은 MappingJacksonHttpMessageConverter를 통해 JSON으로 맵핑된다.

HttpMessageConverter와 @ResponseBody Annotation을 사용하여 Spring의 View 방식을 사용하지 않고 여러 유형의 데이터를 생성하거나 전달할 수 있다.








댓글 없음:

댓글 쓰기