spring @RequestBody @ResponseBody使用及原理
2016-09-09 15:05
525 查看
举例使用
@RequestBody是把整个HttpServletRequest的输入(request.getInputStream()),转换成一个对象,常用的转换是采用json方式,在spring中是RequestResponseBodyMethodProcessor利用HttpMessageConventer做的。前端代码必须采用POST请求(GET请求的输入是空):
<!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript" src="http://www.w3school.com.cn/jquery/jquery-1.11.1.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ var saveDataAry=[]; var data1={"userName":"test","address":"gz"}; var data2={"userName":"ququ","address":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url:"http://localhost:8080/test/mvc/saveUser", dataType:"json", contentType:"application/json", data:JSON.stringify(saveDataAry), success:function(data){ alert("succes" +data); }, error:function(argument) { alert("error" + argument); } }); }); </script> </head> <body> test </body> </html>
后端代码
@Controller public class UserController { @RequestMapping(value = "saveUser") @ResponseBody public String saveUser(@RequestBody List<User> users) { System.out.println("UserController.saveUser users size:"+users.size()); return "ok"; } }
整体springmvc 调用链路
@RequestBody
在处理参数时候各种HandlerMethodArgumentResolver来解决参数实际需要传递参数,其中默认的有24中;而处理@RequestBody的是RequestResponseBodyMethodProcessor。相对的,处理@CookieValue注释的则是ServletCookieValueMethodArgumentResolver。@ResponseBody
而responseBody同样是RequestResponseBodyMethodProcessor作为HandlerMethodReturnValueHandler,处理实际执行的controller HandlerMethod函数的return value.public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws IOException, HttpMediaTypeNotAcceptableException { mavContainer.setRequestHandled(true); //最重要一步,设置请求已经处理过 if (returnValue != null) { writeWithMessageConverters(returnValue, returnType, webRequest); } }
RequestResponseBodyMethodProcessor 的handleReturnValue()函数处理时,首先ModelAndViewContainer.requestHandled设置成功,表明整个http请求已经处理,后续就不会执行veiw渲染了(跳过render view).
参照文档:
http://www.huangyunkun.com/2014/10/30/spring-mvc-argument-resolver/
相关文章推荐
- Spring 注解的使用 @ResponseBody,@RequestBody
- SpringMVC @RequestBody与@ResponseBody注解的使用
- Spring3 MVC使用@ResponseBody的乱码问题及解决办法
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring3 MVC使用@ResponseBody产生很大的响应头
- Spring3 MVC使用@ResponseBody的乱码问题及解决办法
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)
- 使用spring @ResponseBody将controller返回值序列化为json格式
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- Spring 3.x MVC 入门4 -- @ResponseBody & @RequestBody
- Java学习笔记37:Spring 使用 @ResponseBody 返回中文乱码问题解决
- 使用JAVA发送HTTP请求(Http Request),返回HTTP响应(Http Response)内容,代码程序例子及原理说明
- Spring 3.x MVC 入门4 -- @ResponseBody & @RequestBody &HttpMessageConverter
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- SpringMVC @RequestBody接收Json对象字符串 @ResponseBody处理json数据类型