[SPRING] Spring + REST 웹 서비스로 @RequestBody 또는 @ModelAttribute
SPRINGSpring + REST 웹 서비스로 @RequestBody 또는 @ModelAttribute
스프링 3.1과 함께 iPhone 및 Android 용 Restful 웹 사이트 및 웹 서비스를 만들고 있습니다. 내 응용 프로그램에서는 JSON을 Java 객체로 변환하는 데 Spring Message Convertors (org.springframework.http.converter.json.MappingJacksonHttpMessageConverter)를 사용하고 그 반대도 마찬가지입니다.
아래 @ModelAttribute의 도움으로 JSP에서 컨트롤러로 객체 바인딩을위한 Spring form 태그를 사용하고 있습니다.
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@ModelAttributeForgot forgotPassword,
HttpServletRequest request) {
System.out.println("data recived=="+forgotPassword.getNewPassword());
}
그러나 데이터가 iPhone / Android 앱에서 게시되고 그 결과가 다음과 같은 경우에도 동일하게 작동하지 않습니다.
그래서이 문제를 극복하기 위해 @ModelAttribute 대신 @RequestBody 주석을 사용했습니다.
그래서 내 컨트롤러는 다음과 같습니다.
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody Forgot forgotPassword,
HttpServletRequest request) {
System.out.println("data recived=="+forgotPassword.getNewPassword());
}
그것은 그 때 작동하고 나가 얻은 결과는이다 :
그러나 @RequestBody는 JSP 페이지에서 스프링 폼을 사용하지 못하고 데이터가 객체로 변환되지 않고 null 값을 얻습니다.
편집하다:
Bean 클래스 대신 String을 쓰는 동안 아래와 같이 일반 텍스트의 형태로 내용을 가져올 수 있습니다.
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody String string,
HttpServletRequest request) { }
웹 페이지 호출 결과 :
웹 서비스 호출을 사용하는 iPhone의 결과 (** JSON에서) **
{"newPassword":"somepassword","confirmPassword":"somepassword","uid":"11"}
하지만 문제는이 접근법을 사용하여 자바 객체로 JSON 문자열을 수동으로 구문 분석해야한다는 것입니다. 그리고 웹 페이지 콘텐츠에서 나는 내가 원하지 않는 값을 수동으로 찾아야 만합니다.
도와주세요.
문안 인사,
아룬 쿠마르
해결법
-
==============================
1.@ModelAttribute가 양식 게시 매개 변수에서 바인딩되고 @RequestBody가 Json 변환기로 직접 본문을 전달하기 때문에 미안하지만 방법이 있다고 생각하지 않습니다. 스프링 폼 태그를 간단한 json 포스트로 대체 할 수는 있지만 두 개의 @RequestMapping 메소드를 갖는 것보다 덜 편리합니다.
@ModelAttribute가 양식 게시 매개 변수에서 바인딩되고 @RequestBody가 Json 변환기로 직접 본문을 전달하기 때문에 미안하지만 방법이 있다고 생각하지 않습니다. 스프링 폼 태그를 간단한 json 포스트로 대체 할 수는 있지만 두 개의 @RequestMapping 메소드를 갖는 것보다 덜 편리합니다.
-
==============================
2.그것의 @RequestBody. @RequestMapping을 사용하여 출력으로 기대하고 생성하는 MIME 형식을 지정하는 것이 좋습니다.
그것의 @RequestBody. @RequestMapping을 사용하여 출력으로 기대하고 생성하는 MIME 형식을 지정하는 것이 좋습니다.
@RequestMapping(value="/authenticate",produces="application/json", consumes="application/json",method=RequestMethod.POST)
그런 다음 적절한 메시지 변환기를 AnnotationMethodHandlerAdapter에 등록하십시오.
이 메시지 변환기는 생성 및 소비 특성을 기반으로 요청 및 응답 엔티티를 마샬링 및 언 마샬링합니다.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="order" value="1" /> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" > <property name="supportedMediaTypes" value="application/json"/> </bean> <bean class = "org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" /> </bean> </list> </property> </bean>
from https://stackoverflow.com/questions/13229584/requestbody-or-modelattribute-with-springrest-web-services by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring REST 보안 - 다른 URL을 다르게 확보 (0) | 2019.01.13 |
---|---|
[SPRING] Hibernate JPA와 Spring Framework 로딩 타임 / 런타임 위빙을 가능하게하는 방법 (0) | 2019.01.13 |
[SPRING] 단일 페이지 AngularJS 응용 프로그램을위한 기본 스프링 보안 (세션 관리) 구현 방법 (0) | 2019.01.13 |
[SPRING] Spring 3 - 다른 객체 속성을 기반으로 런타임에 동적 Autowiring (0) | 2019.01.13 |
[SPRING] 생명주기 이벤트에서 BeanFactoryPostProcessor 및 BeanPostProcessor (0) | 2019.01.13 |