본문 바로가기
SPRING/Restful 웹서비스 설정

[Spring 3.0] Restful 웹 서비스 구현 2

by 정윤재 2011. 10. 21.


앞의 글에서

curl -X PUT -HContent-type:application/xml --data "<?xml version='1.0' encoding='UTF-8'?><user><USER_ID>3</USER_ID><PASSWORD>guest3</PASSWORD></user>"
http://localhost:8080/push_web_server/reg/user/1234.xml

로 접근 했던 방식은 앞의 header 에도 xml 이라고 표시해 주고
URL  뒤에도 확장자 방식으로 뒤에 .xml 을 받기 때문에 좀 맘에 들지 않았다.
또한 쓸데 없이 view 에 대한 jsp 파일도 필요 했다.
그래서 header 에만 받고 url에는 확장자가 붙지 않도록 코드를 좀 바꾸어 보았다.

dispatcher-servlet

 <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
   <property name="mediaTypes">
  <map>
     <entry key="xml" value="application/xml" />
     <entry key="html" value="text/html" />
  </map>
   </property>
 
   <property name="viewResolvers">
  <list>
    <!-- JAXB XML View (Controller 에서 view 이름을  bean 이름으로 지정하면 결과가 넘어와서 View 화면에 XML 로 뿌려짐) -->
   <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
     <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
   </bean>
   
   </list>
   </property>

 
 </bean>
<!-- 내부에서 POST 메소드의 body로 넘어오는 XML 값을 자동 파싱 하기 위함 -->
<bean id="jaxbMarshaller"
class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
 <list>
     <value>com.incross.dto.UserDTO</value>
 </list>
</property>
</bean>
<!-- view 로 넘어올 dto 들을 파싱 하여 view 페이지로 넘겨주기 위함 -->
<bean id="userDTO" class="org.springframework.web.servlet.view.xml.MarshallingView">
  <constructor-arg ref="jaxbMarshaller" />
</bean>

==============================================================
controller

 @RequestMapping(value = "/user/{user}", method = RequestMethod.PUT)
 public String getUser(@PathVariable String user, ModelMap model,HttpServletRequest request,@RequestBody String body) {
  
//@RequestBody String body  => Request 의 body 를 표현함
  logger.debug("***********enter controller restful test message send ***********");
  Source source = new StreamSource(new StringReader(body));
  UserDTO userDTO = (UserDTO) jaxb2Mashaller.unmarshal(source);
  //body 가 XML 방식으로 넘어오는 값 parsing 함
  //보낼때 http 헤더에 Content-type:application/xml 로 만들어서 데이터 보내야함
  //curl -X POST -HContent-type:application/xml --data "<user><USER_ID>3</USER_ID><PASSWORD>guest3</PASSWORD></user>"
http://124.136.171.168:8080/push_web_server/reg/user/1234.xml
  //와 같이 리눅스 shell 상에서 테스트 가능함
  
  logger.debug("user::"+user);
  logger.debug("userDTO::"+userDTO.getUSER_ID()+"::"+userDTO.getPASSWORD());
  
  userDTO.setUSER_ID("shonm");
  userDTO.setPASSWORD("koei4444");
  model.addAttribute("userDTO",userDTO);
  return "userDTO";
  
 } 
========================================================
테스트
shell> curl -X PUT -HContent-type:application/xml --data "<?xml version='1.0' encoding='UTF-8'?><user><USER_ID>3</USER_ID><PASSWORD>guest3</PASSWORD></user>" http://localhost:8080/push_web_server/reg/user/1234

결과
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><PASSWORD>koei4444</PASSWORD><USER_ID>shonm</USER_ID></user>







'SPRING > Restful 웹서비스 설정' 카테고리의 다른 글

[Spring 3.0] Restful 웹 서비스 구현  (2) 2011.10.19

댓글