오늘은 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)
UserList userList = new UserList(users)
return userList;
}
--------------------------------------------------------------------
@ResponseBody Annotation은 리턴 Object(User 또는 UserList)를 응답하여 정보를 전달하는 데 사용되고, 이것은 MappingJacksonHttpMessageConverter를 통해 JSON으로 맵핑된다.
HttpMessageConverter와 @ResponseBody Annotation을 사용하여 Spring의 View 방식을 사용하지 않고 여러 유형의 데이터를 생성하거나 전달할 수 있다.
댓글 없음:
댓글 쓰기