精华内容
下载资源
问答
  • @RequestBody注解的使用
    千次阅读
    2020-10-14 09:38:35

    https://blog.csdn.net/justry_deng/article/details/80972817
    补充:https://blog.csdn.net/Lemon_MY/article/details/106600647

    注意点

    1.@RequestBody主要用来接收前端传递给后端的json字符串中的数据的即@RequestBody注解一般是与json配合使用的。前端将参数汇成json传输,后端使用一个@RequestBody注解的参数接收。

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

    3.@RequestBody注解的作用是将前端传来的所有参数汇集到一起,作为一个请求体来接收,因此在测试中后端方法中仅使用一个@RequestBody注解的string参数,然后将其输出,可以看到输出的是所有前端传来的参数和值(前端传json)。

    4.如果参数时放在请求体(json)中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体(json)中的话即写成"str": "123"的形式,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或者形参前什么也不写也能接收。

    更多相关内容
  • @ResponseBody 和 @RequestBody 注解的区别 1 前言 在详述 @ResponseBody 和 @RequestBody 注解之前,咱先了解一下 @RequestMapping 注解,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。...
  • 浅析@ReponseBody和@RequestBody注解主要讲述了@ReponseBody的作用和@RequestBody的作用和springMvc内部是如何对他们进行解析的
  • spring 支持@RequestBody注解依赖包 、 spring 支持@RequestBody注解依赖包 spring 支持@RequestBody注解依赖包
  • 本篇文章主要介绍了springMvc注解之@ResponseBody和@RequestBody详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了SpringMVC restful 注解之@RequestBody进行json与object转换的相关资料,需要的朋友可以参考下
  • spring mvc 中@RequestBody注解作用

    万次阅读 多人点赞 2021-01-11 23:29:41
    一.@RequestBody作用 @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),所以只能发送POST请求。 GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交...

    一.@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
           里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收
    )。

    参考地址:https://blog.csdn.net/justry_deng/article/details/80972817

    二.实现案例

    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.页面访问

     

     

    展开全文
  • 主要介绍了解读@RequestBody的正确使用方法,具有一定借鉴价值
  • @RequestBody与@Validated使用时校验失效.md
  • spring中@RequestBody注解作用

    千次阅读 2019-05-24 13:27:59
    1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。  2、 ...

    1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

      2、

        通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
        例如说以下情况:
        $.ajax({
            url:"/login",
            type:"POST",
            data:'{"userName":"admin","pwd","admin123"}',
            content-type:"application/json charset=utf-8",
            success:function(data){
              alert("request success ! ");
            }
        });

        @requestMapping("/login")
        public void login(@requestBody String userName,@requestBody String pwd){
          System.out.println(userName+" :"+pwd);
        }
        这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
          String userName;
          String pwd;
        那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
        需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。

     3、

        在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式

        不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在
        特殊情况下才会使用,
        例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式

    展开全文
  • } 前端使用put请求方式,data传递参数 export function updateCourse(data){ return request({ url:'/course', method:'put', data:data, }) } 如果后端不使用@RequestBody注解接收参数,前端使用data传递参数,则...


    前言


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、前端向后端发送数据

    1、前端使用get方法,使用data,后端不使用@RequestBody,实际接收不到前端传来的参数。

    后端接收参数不使用@RequestBody

        @RequestMapping("/list")
        public TableDataInfo list(CourseInfo courseInfo){
            System.out.println(courseInfo.toString());
            Integer pageNum = courseInfo.getPageNum();
            Integer pageSize = courseInfo.getPageSize();
            String orderBy = courseInfo.getOrderBy();
            PageUtils.startMyPage(pageNum,pageSize,orderBy);
            List<CourseInfo> courseInfoList = courseService.selectCourseInfoList(courseInfo);
            return PageUtils.getMyDataTable(courseInfoList);
        }
    

    前端发送get请求,以data方式携带数据。

    export function listCourse(query){
      return request({
        url:'/course/list',
        method:'get',
        data:query
      })
    }
    

    这种方法实际接收不到前端传递来的参数,因为get请求参数传递不能是data,而应该是params。
    如果把后端接收参数方式改为@RequestBody,前端不作改动,则请求会报400错误(请求失败),后端报缺失需要的请求体,也就是需要CourseInfo参数,但是前端并没有传送过来。

    [org.springframework.http.converter.HttpMessageNotReadableException: Required request 
    body is missing: public com.wbz.system.domain.TableDataInfo com.wbz.system.controller.CourseController.list(com.wbz.system.domain.CourseInfo)
    

    总结:在获取数据,即查询数据库的时候,使用get请求方式,使用params的方式携带参数,或者使用url占位符的方式携带参数。不要再查询操作中使用post方法。

    2、前端发送post请求,参数携带方式为params,后端不使用@RequestBody,则能成功接收到参数。

    后端不使用@RequestBody注解

        @PostMapping
        public AjaxResult add( CourseInfo courseInfo){
            System.out.println(courseInfo.toString());
            return toAjax(courseService.insertCourse(courseInfo));
        }
    

    前端使用post请求和params参数传递方式

    export function addCourse(data){
      return request({
        url:'/course',
        method:'post',
        params:data,
      })
    }
    

    如果此时把前端参数传递方式改为data,则后端不能接收到参数。前端会报500错误(内部服务器错误),因为要执行插入操作,但是参数没传递过来,对象为空。
    如果再将后端加上@RequestBody,能成功接收前端的post方法使用data传递来的参数。将@PostMapping改为@RequestMapping也是可以正常的,验证了@PostMapping是@RequestMapping的衍生注解,能够使用@RequestMapping代替@PostMapping

    总结:执行新增操作的时候,使用post请求,使用data方式携带参数,而不是使用params。后端使用RequestMapping或者@PostMapping注解,使用@RequestBody接收参数。

    3、前端发送put请求,使用data方式传递参数,后端使用@PutMapping注解,使用@RequestBody接收参数。能够成功

    后端使用@PutMapping注解,使用@RequestBody接收参数

        @PutMapping
        public AjaxResult edit( @RequestBody CourseInfo courseInfo){
            System.out.println(courseInfo.toString());
            return toAjax(courseService.updateCourse(courseInfo));
        }
    

    前端使用put请求方式,data传递参数

    export function updateCourse(data){
      return request({
        url:'/course',
        method:'put',
        data:data,
      })
    }
    

    如果后端不使用@RequestBody注解接收参数,前端使用data传递参数,则接收不到前端传递过来的参数(对象为null)。如果把前端的参数传递方式改为params则可以接收到。
    如果后端使用@RequestBody注解接收参数,前端使用params传递参数,则会报请求体缺失异常(请求体中需要CourseInfo参数,但是没有)。
    总结,对数据库的更新操作update后端使用@PutMapping或者@RequestMapping,使用@RequestBody注解接收参数,前端使用put请求方式,使用data传递参数。虽然使用params(后端不使用@RequestBody注解)也可以传递参数,但是不建议这样使用。虽然可以使用post代替put但是同样也不建议这样使用。

    4、后端使用@DeleteMapping注解,@RequestBody接收参数,并使用@PathVariable读取URL占位符参数;前端使用delete请求方式,使用data传递参数。能够成功。

    后端使用@DeleteMapping注解,@PathVariable获取URL参数,@RequestBody获取前端传递的请求体参数:

        @DeleteMapping("/{ids}")
        public AjaxResult delCourse(@PathVariable Long []ids, @RequestBody String hhh){
            System.out.println(Arrays.toString(ids));
            System.out.println(hhh);
            return toAjax(courseService.delCourse(ids));
        }
    

    前端使用delete请求方式,URL中设置占位符参数,data传递数据:

    export function delCourse(id) {
      return request({
        url:'/course/'+id,
        method:'delete',
        data:"HHHHH"
      })
    }
    

    如果把前端传递数据方式由data改为params,则前端报400请求失败,后端报缺失请求体错误(需要在请求体中包含String类型的hhh,但是前端使用params传递参数,没有包含在请求体中,而是包含在URL中,因此获取不到)
    后端使用@RequestParam,前端使用params传递参数,则前端报400(请求失败),后端报缺少需要的参数错误,前端使用data传递参数,后端使用@RequestParam仍然不行,报相同的错误。

    总结:delete数据的时候,前端使用delete请求方式,可以在URL中设置占位符,使用data传递参数;后端使用@DeleteMapping注解,使用@PathVariable接收URL占位符参数,使用@RequestBody接收参数。使用post请求也可以完成delete的操作,但是不支持这样做

    如果前后端请求方式不匹配,会报405,('post')请求方式不支持错误。


    总结

    本文介绍了前端向后端发送数据,以及后端如何接收数据的方法。这里有很多细节地方,进行记录,方便以后查阅。

    展开全文
  • 今天做项目用到了@requestbody注解 代码: @PostMapping("/findList") public List<Brand> findList(@RequestBody Map searchMap){ return brandService.findList(searchMap); } 于是记录一下springmvc中@...
  • @ResponseBody和@RequestBody注解的区别 先了解@RequestMapping @RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上...
  • @RequestBody注解分析

    千次阅读 2021-01-14 22:56:45
    @RequestBody注解风析 1.@RequestBody 1.1用途: 用于接收前端传递给后端的json字符串中的数据。 @RequestBody用来接收前端传递给后端的json字符串中的数据,因为GET方式的请求没请求体(GET只能URL中携带key-value...
  • @RequestBody注解的原理以及使用技巧

    千次阅读 2021-01-25 00:13:36
    本文是基于SpringBoot,进行的演示说明。...在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。 注:一个请求,只有一个Reque
  • @RequestBody的使用

    万次阅读 多人点赞 2018-07-09 16:13:57
    提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基 本知识常识,可选择性跳过。 声明:本文是基于SpringBoot,进行的演示说明。 基础知识介绍: @Request...
  • 关于我使用@RequestBody注解遇到的那些坑 1、使用@RequestBody注解的话,不用使用@GetMapping接收请求。 2、如果@RequestBody注解接收的是一个字符串,那么这个字符串会自带两个双引号,在使用的时候,我们必须要把...
  • @requestBody注解的使用

    2020-09-01 17:13:20
    @requestBody注解的使用 1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理...
  • @RequestBody注解使用

    千次阅读 2019-11-22 21:22:16
    文章目录RequestBody注解使用关键点注意点一个小例子ajax代码后台接收 RequestBody注解使用关键点 注意点 项目中要加入处理json字符串的依赖(jar包),如jackson @RequestBody主要用来接收前端传递给后端的json...
  • 1、问题描述 我写完一个接口,在用postman测试的时候,发现其中有一个参数cEnterpriseId明明是有值的,但接口controller接收到的该参数为null,但其他参数都不为null的。...加@JsonProperty注解 在实体类...
  • 使用SpringAOP编程时如何获取接口中@RequestBody注解的参数? 请参考文章:Cannot call getReader(), getInputStream() already called分析与解决_zh_chong的博客-CSDN博客 针对HttpServletRequest request,...
  • 什么时候需要@RequestBody注解

    千次阅读 2021-04-24 20:21:55
    关于 @RequestBody 什么时候需要用@RequestBody? 当前端传来的值,不是个完整的对象,只是包含了 Req 中的部分参数时,不需要@RequestBody 当前端传来的是一个完成对象的时候,需要@RequestBody 不需要的情况 前端...
  • Springboot @RequestBody注解踩坑

    千次阅读 2021-01-12 20:17:08
    @RequestBody json注入Bean属性为空 1、接收JSON数据注入到Bean中,必须要加RuquestBody注解 2、判断属性名称字段是否相同 3、spring 默认不为首字母大写的JavaBean进行赋值操作,若首字母大写进行赋值操作需加入@...
  • 使用与不使用@RequestBody注解的区别

    千次阅读 2020-05-19 19:14:24
    如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,name = "actBudgetCost",value = "预算")@RequestBody ActBudgetCost actBudgetCost, ...
  • 1.使用@RequestBody注解: 前端ajax传送数据的时候,需要指明contentType参数为:contentType: "application/json" @RequestBody注解接收的参数是Json对象的字符串,所以需要用JSON.stringify()将...
  • 解决java方法中添加两个@RequestBody注解参数后,swagger传参报错的问题。 查资料后,发现一个方法参数中只能使用一个@RequestBody注解。 最终是将两个json合并为一个,嵌套方案解决。 最终代码中根据名称,获取对应...
  • springboot @RequestBody注解学习

    千次阅读 2019-12-19 20:58:41
    @RequestBody的使用 功能介绍 @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的); **GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST...
  • 前几天犯了一个低级错误,在使用@GetMapping的接口上面使用了@RequestBody注解来传递参数,导致参数校验一直不通过,报RequestBody missing的错误。特此记录下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,117
精华内容 32,846
关键字:

@requestbody注解的作用