zoukankan      html  css  js  c++  java
  • @RequestBody和@RequestParam使用区别

     

    一、接受处理参数的来源上

      @RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中(URL后拼接的参数用@RequestParam);

      @RequestBody接收的参数是来自requestBody中,即请求体。

    二、处理数据格式上

      @RequestParam处理Content-Type 为 form-data、application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性;

      @RequestBody一般处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/jsonapplication/xml等类型的数据。

    三、请求类型上

      @RequestParam可用于GET和POST请求;

      @RequestBody可用于POST请求,不能用于GET请求。通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。GET请求没有HttpEntity所以不适用。

    四、POST、GET中两种注解的使用

    POST:

    @RequestBody

    (@RequestBody Map map)
    (@RequestBody Object object)
    application/json时候可用
    form-data、x-www-form-urlencoded时候不可用

    @Requestaram

    (@RequestParam Map map)
    application/json时候,json字符串部分不可用,url中的?后面添加参数即可用,form-data、x-www-form-urlencoded时候可用,但是要将Headers里的Content-Type删掉
    (@RequestParam String waterEleId,@RequestParam String enterpriseName)
    application/json时候,json字符串部分不可用,url中的?后面添加参数即可用
    form-data、x-www-form-urlencoded时候可用,且参数可以没有顺序(即前端传过来的参数或者url中的参数顺序不必和后台接口中的参数顺序一致,只要字段名相同就可以),但是要将Headers里的Content-Type删掉
    (@RequestParam Object object)
    不管application/json、form-data、x-www-form-urlencoded都不可用

    既不是@RequestBody也不是@RequestParam,没有指定参数哪种接收方式

    (Map map)
    (Object object)
    application/json时候:json字符串部分不可用,url中的?后面添加参数不可用。
    因为没有指定,它也不知道到底是用json字符串部分还是?后面添加参数部分,所以干脆都不可以用
    form-data、x-www-form-urlencoded时都不可用,见图二
     
    (HttpServletRequest request)
    application/json不可用
    form-data、x-www-form-urlencoded时可用

    GET:

    @RequestBody

    RequestBody -- Map / Object
    GET请求中不可以使用@RequestBody

    @RequestParam

    (@RequestParam Map map)
    在url中的?后面添加参数即可使用
    (@RequestParam String waterEleId,@RequestParam String enterpriseName)
    在url中的?后面添加参数即可使用
    (@RequestParam Object object)
    GET请求中不可以使用

    THE IDEA:

      @PathVariable注解,解决动态获取参数问题

      一种应用场景,接口规范为resultful风格时,举个例子:如果要获取某个id下此条问题答案的查询次数的话,则后台就需要动态获取参数,其注解为@PathVariable,并且requestMapping中的value应为value="/{id}/queryNum",截图如下:

    参考:

    https://blog.csdn.net/weixin_38004638/article/details/99655322

    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    https://blog.csdn.net/walkerjong/article/details/7946109

    https://my.oschina.net/u/3372000/blog/906217

    https://www.jianshu.com/p/4981911d5e15

    https://cloud.tencent.com/developer/article/1414464

     

  • 相关阅读:
    display:block;inline;inline-block大总结
    img图片inline-block总结
    定时器
    获取样式
    UmiJS
    vue 点击当前路由重新加载该路由
    Support for the experimental syntax 'decorators-legacy' isn't currently enab -- 装饰器@
    js 改变匹配到的字符串的颜色
    with
    页面从输入 URL 到页面加载显示完成
  • 原文地址:https://www.cnblogs.com/mwq1992/p/14174519.html
Copyright © 2011-2022 走看看