Spring 中接收前端传递的对象、数组等数据的方式详解
1. 引言
在springMVC中,controller中方法的参数是自动注入的,在使用注解的方式下,通常有:
@RequestParam: 取querystring当中的参数
@PathVariable: 取 在@RequestMapping中定义的占位符中的参数(/test/{id})
@RequestBody: 取request 这个消息体 (可以组装json对象)
在不使用注解的情况下,默认有一些对象可以自动注入如:
HttpServletRequest
HttpServletResponse
MultipartFile
MultipartRequest
除此之外不使用注解的情况下,也可以接受前台传入的querystring中的参数
2. 接受前端传递的对象
从querystring中的参数中获取:
@RequestParam:接受对象类型(Integer、String、Boolean等基本数据类型),不能接收自定义类型。
不带注解:接受基本数据类型,若接收类型为自定义类型,会组装参数中与自定义类型属性名和类型相符的参数。
例:
后台:
@ResponseBody @RequestMapping("/accept-object") public String acceptObject( @RequestParam Integer studentId, @RequestParam String studentName, Integer studentAge, Student student ) { logger.debug("---->" + studentId); logger.debug("---->" + studentName); logger.debug("---->" + studentAge); logger.debug("---->" + JSON.toJSONString(student)); return studentId + ">>" + studentName + ">>" + studentAge + ">>" + JSON.toJSONString(student); }
前端:
<div> <form action="${pageContext.request.contextPath}/accept-object"> <span>学生id</span> <input type="number" name="studentId" placeholder="studentId"><br> <span>学生姓名</span> <input type="text" name="studentName" placeholder="studentName"><br> <span>学生年龄</span> <input type="number" name="studentAge" placeholder="studentAge"><br> <input type="submit" value="提交"> </form> </div>
过程及结果:
结论及分析:
1.获取自定义类型的对象时,不使用注解即可以获取
2.在组装对象时可以使用以被获取过的参数
从请求体(body)中获取:
用到的注解@RequestBody
当请求体中是一段json数据时,@RequestBody会解析该json字符串并将其注入指定的自定义类型中。
例:
后台代码:
@ResponseBody @RequestMapping("/accept-json-object") public String acceptObject( @RequestBody Student student ) { logger.debug("---->" + JSON.toJSONString(student)); return JSON.toJSONString(student); }
测试:
结果:
结论:通过@RequestBody的方式可以接收以json数据传输的对象,但前提是请求的Content-Type必须为application/json,并且引入了jackson-databind包。
3. 接收前端传递的数组
接收数组可以使用注解方式的@RequestParam、@RequestBody或者无注解的方式,也可以同时使用他们三个
在接受数组时,默认按照方法的参数名来映射请求的参数,目前很多前端框架喜欢传递数组时在请求参数后面加上"[]",所以使用@RequestParam时可以规定value使之对应如@RequestParam("ids[]") Integer[] ids。
例:
后台:
@ResponseBody @RequestMapping(value = "/accept-arr-object") public String acceptArray( Integer[] ids, @RequestParam("ids[]") Integer[] id2s, @RequestBody Integer[] id3s ) { logger.debug("---->" + JSON.toJSONString(ids)); logger.debug("---->" + JSON.toJSONString(id2s)); logger.debug("---->" + JSON.toJSONString(id3s)); return JSON.toJSONString(ids) + ">>" + JSON.toJSONString(id2s) + ">>" + JSON.toJSONString(id3s); }
测试:
结果:
4. 总结
在项目中,能够灵活的使用各种传参方式能灵活的实现与前端的交互,总之,自己喜欢的就是最好的。
文章评论 ( 0 )