blu*_*bel 7 rest spring-mvc http-post
我对SpringMVC REST概念不熟悉.需要专家的帮助来理解/解决以下问题,我开发了一个SpringMVC应用程序,以下是控制器类代码的一部分,并且它的工作方式完全正常,这意味着它适用于JSON类型对象,
@RequestMapping(method = RequestMethod.POST, value = "/user/register")
public ModelAndView addUser( @RequestBody String payload) {
try{
ObjectMapper mapper = new ObjectMapper();
CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class);
UserBusiness userBusiness = UserBusinessImpl.getInstance();
CreateNewUserResponse response = userBusiness.createNewUser(request);
return new ModelAndView(ControllerConstant.JASON_VIEW_RESOLVER, "RESPONSE", response);
Run Code Online (Sandbox Code Playgroud)
这是我的rest-servlet.xml看起来像
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean id="jsonViewResolver" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean name="UserController" class="com.tap.mvp.controller.UserController"/>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让它适用于正常的POST请求,我的控制器不应该接受JSON类型的对象,而应该适用于普通的HTTP POST变量.我如何从请求中获取值?我应该为此做些什么修改.我需要摆脱
ObjectMapper mapper = new ObjectMapper();
CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class);
Run Code Online (Sandbox Code Playgroud)
而是需要添加创建实例的方法
CreateNewUserRequest
class,通过调用它的构造函数.为此,我需要从请求中获取值.我怎么做?我可以将@RequestBody字符串有效负载视为地图并获取值吗?或者是否有一种特定的方法从HTTP POST方法的请求中获取值?以下值将在请求中,
firstName,lastName,email,password
Tom*_*icz 10
你在这里混合两个概念.当Spring为您处理JSON/XML编组时,Spring MVC中的REST服务更加优雅:
@RequestMapping(
headers = {"content-type=application/json"},
method = RequestMethod.POST, value = "/user/register")
@ResponseBody
public CreateNewUserResponse addUser( @RequestBody CreateNewUserRequest request) {
UserBusiness userBusiness = UserBusinessImpl.getInstance();
return userBusiness.createNewUser(request);
}
Run Code Online (Sandbox Code Playgroud)
注意@ResponseBody注释.您不需要任何视图解析器和手动JSON编组.你可以免费获得XML(通过JAXB).
但是,通过表单POST发送的数据非常不同.我建议创建第二个映射处理不同的媒体类型:
@RequestMapping(
headers = {"content-type=application/x-www-form-urlencoded"},
method = RequestMethod.POST, value = "/user/register")
public ModelAndView addUser(@RequestParam("formParam1") String formParam1) {
//...
}
Run Code Online (Sandbox Code Playgroud)
使用此配置,REST调用Content-type=application/json将被路由到第一个方法并向第二个方法形成POST请求(至少在理论上,尚未尝试过).请注意,与原始@RequestParam注释相比,Spring中处理表单数据的方法更简单,请参阅:在Spring MVC 3中传递请求参数.
| 归档时间: |
|
| 查看次数: |
39533 次 |
| 最近记录: |