springmvc数据绑定之@RequestParam
2017-03-23 00:00
295 查看
主要测试@RequestParam是怎么接收参数的,经测试,RequestParam注解可以帮助我们接收一些复杂数据类型,集合、数组、文件类型和基本的数据类型(包含包装类)。
1、测试接收List,Array
2、测试接收文件,测试文件,用的是MultipartFile类型,所以要添加MultipartFileResolver的bean,否则要报错:Expected MultipartHttpServletRequest: is a MultipartResolver configured?,如下是配置:
以下是RequestParamMethodArgumentResolver解析参数的过程:
1、首先判断接收的参数是不是MultipartFile类型
2、判断是不是List<MultipartFile>或者Collection<MultipartFile>类型
3、判断是不是匹配“javax.servlet.http.Part”,可以通过servletRequest.getPart()来获取参数
4、如果arg还为null,则从multipartRequest获取所有文件信息
5、arg仍然为null,则获取获取List,包装类,基本数据类型的参数,最终返回arg。
1、测试接收List,Array
<script type="text/javascript"> $(document).ready(function(){ var $array = new Array(); $array.push(0); $array.push(1); $array.push(2); $.ajax({ url:'${project_name}/springmvc/hello', type:'post', data:{'ids':$array,'name':'wang'}, success:function(data){ } }); }) </script>
//接收集合 @RequestMapping("/hello") public void hello(@RequestParam(value="ids[]")List<Integer> ids,String name ,HttpServletResponse response) throws Exception{ response.getWriter().write("success"); } //接收数组 @RequestMapping("/hello") public void hello(@RequestParam(value="ids[]") int[] ids,String name ,HttpServletResponse response) throws Exception{ response.getWriter().write("success"); }
2、测试接收文件,测试文件,用的是MultipartFile类型,所以要添加MultipartFileResolver的bean,否则要报错:Expected MultipartHttpServletRequest: is a MultipartResolver configured?,如下是配置:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
<!-- enctype="multipart/form-data"是必须的,也必须post提交--> <form action="springmvc/file" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="file" name="file" /> <input type="submit" value="提交"/> </form>
//上传多个文件 @RequestMapping("/files") public void files(@RequestParam(value="file") List<MultipartFile> file,String name ,MultipartHttpServletRequest request, HttpServletResponse response) throws Exception{ response.getWriter().write("success"); } //上传单个文件 @RequestMapping("/file") public void file(@RequestParam MultipartFile file,String name ,MultipartHttpServletRequest request, HttpServletResponse response) throws Exception{ response.getWriter().write("success"); }
以下是RequestParamMethodArgumentResolver解析参数的过程:
1、首先判断接收的参数是不是MultipartFile类型
2、判断是不是List<MultipartFile>或者Collection<MultipartFile>类型
3、判断是不是匹配“javax.servlet.http.Part”,可以通过servletRequest.getPart()来获取参数
4、如果arg还为null,则从multipartRequest获取所有文件信息
5、arg仍然为null,则获取获取List,包装类,基本数据类型的参数,最终返回arg。
protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest webRequest) throws Exception { Object arg; HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(servletRequest, MultipartHttpServletRequest.class); //单个文件 if (MultipartFile.class.equals(parameter.getParameterType())) { assertIsMultipartRequest(servletRequest); Assert.notNull(multipartRequest, "Expected MultipartHttpServletRequest: is a MultipartResolver configured?"); arg = multipartRequest.getFile(name); } //多个文件 else if (isMultipartFileCollection(parameter)) { assertIsMultipartRequest(servletRequest); Assert.notNull(multipartRequest, "Expected MultipartHttpServletRequest: is a MultipartResolver configured?"); arg = multipartRequest.getFiles(name); } else if ("javax.servlet.http.Part".equals(parameter.getParameterType().getName())) { assertIsMultipartRequest(servletRequest); arg = servletRequest.getPart(name); } else { arg = null; //多个文件 if (multipartRequest != null) { List<MultipartFile> files = multipartRequest.getFiles(name); if (!files.isEmpty()) { arg = (files.size() == 1 ? files.get(0) : files); } } if (arg == null) { //出文件之外的参数,通过参数的个数来判断是否为集合 String[] paramValues = webRequest.getParameterValues(name); if (paramValues != null) { arg = paramValues.length == 1 ? paramValues[0] : paramValues; } } } return arg; }
相关文章推荐
- SpringMVC学习(4):数据绑定1 @RequestParam
- SpringMVC学习(4):数据绑定1 @RequestParam
- SpringMVC第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam注解】
- springMVC参数绑定——@RequestParam和@PathVariable注解
- SpringMVC学习(5):数据绑定2 @PathVariable、@CookieValue、@RequestHeader、@ModelAttribute..
- SpringMVC学习(5):数据绑定2 @PathVariable、@CookieValue、@RequestHeader、@ModelAttribute..
- SpringMVC(五):@RequestMapping下使用@RequestParam绑定请求参数值
- springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
- SpringMVC —— @RequestParam @RequestBody @PathVariable 等参数绑定
- Spring 数据绑定 @RequestParam @ModelAttribute
- SpringMVC绑定ajax传递json数据到pojo对象错误(400 Bad Request)
- springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
- SpringMVC第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam注解】
- 第六章 注解式控制器详解——SpringMVC强大的数据绑定(1)
- springMVC数据绑定、类型转换
- springmvc的@RequestMapping、@PathVariable、@RequestParam
- SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解
- springmvc的@RequestMapping、@PathVariable、@RequestParam
- SpringMVC自定义日期类型的数据绑定
- SpringMVC数据绑定