一.@RequestBody的作用

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),所以只能发送POST请求。

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交

在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

jQuery中,$.ajax()默认发送的参数类型及编码为:application/x-www-form-urlcoded@RequestBody处理的参数类型及编码为:aplication/json或者是application/xml,通过contentType属性来指定

在传递之前,对JSON对象使用JSON.stringify(),JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串

后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类),会根据json字符串中的key来匹配对应实体类的属性如果匹配一致且json中的该key对应的值
符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性

注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、
       数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收
       参数的机制不变,只不过RequestBody 接收的是请求体里面的数据
;而RequestParam接收的是key-value
       里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收
)。

参考地址:@RequestBody的使用_justry_deng的博客-CSDN博客_@requestbody

二.实现案例

1.jsp页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
    <script>
        var userList=new Array();
        userList.push({userName:"beijing",age:34});
        userList.push({userName:"shanghai",age:89});
        $.ajax({
            type:"post",
            url:"${pageContext.request.contextPath}/bike7",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=utf-8",
            success:function(result){
                alert(result);
            }
        })
    </script>
</head>
<body>

</body>
</html>

2.controller

  /**
     * @author liujianfu
     * @description      controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike6")
    public String bike6(){
      System.out.println("controller6:");
        return "ajax";
    }
    /**
     * @author liujianfu
     * @description      controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike7")
    @ResponseBody
    public String bike7(@RequestBody List<User> userList){
        for(User u:userList){
            System.out.println("user:"+u.getUserName());
        }
        return "ok";
    }

3.spring-mvc 配置文件

4.页面访问

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐