您的位置:首页 > 编程语言 > Java开发

springMVC 中接收前端传递的对象、数组等数据的方式详解

2017-09-19 20:18 911 查看
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.      总结

在项目中,能够灵活的使用各种传参方式能灵活的实现与前端的交互,总之,自己喜欢的就是最好的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息