get 加body体传参

get 加body体传参

场景:

        做业务的时候经常会遇到这样的场景,比如传统业务查询的时候,get 请求但是需要加好几个请求过滤参数,在加上分页的话,参数的确有点多,
     @ RequestParam (用此注解把请求普通参数绑定在控制的方法上),  看起来不美观,写起来麻烦,感觉很low如果用一个对象,或者map接收多好,
     干净又利落。

为啥这么做?可以实现吗?

 1.问题在举的场景里面已做了简单的分析
 2.首先官方不推荐这样做,但是http(基于tcp的超文本传输协议)并没有规定,get 请求不能加body
 3.大家最关心的问题来了,能否实现,的确能实现,而且spring是支持的

怎么去实现?

  1. 用对象或者map接收参数,我们想到的就以 @RequestBody 注解以json 体的形式接收
  2. 需要注意的是此处要用 @RequestParam 注解来接收对象和Map参数对象
  3. 请求方式仍然是 get

常见的报错 ?

  1. 返回状态码 400(Bad Request)
    答: 报着错误就是传参错误
    a. 比如接收的实体对象字段不一样
    b. 传的参数格式不一样,需要的json
    c.或者是中间件的限制,比如tomcat8.5 默认| 不支持 {},要改为|{}

实现案例

  1. 后台实现 (伪代码)
   @GetMapping"/路径")
      A:   public Dto  queryDataList(@RequestParam Map<String,Object>() params ){
               return new Dto();
          }
     B:      public Dto  queryDataList(User ){ // 无注解
               return new Dto();
          }
      Dto:(数据分装传输对象)
      queryDataList:(方法名)
     @RequestParam Map<String,Object>() params : (注解传参)`
     @GetMapping"/路径"
  1. postman 测试结果(postMan版本过低测不了,get方式 body 是灰色的。选新的版本)
    body体的选择,选form—data 表单形式传参,如果前端不知道怎么传,直接看Headers 头信息的数据内容

思考:

尽管这样解决了get 加body 体传参,但是仍建议用post 加body
eg : get
params :

             {
               key : value,
               key2: value2,
             }

value 与value2 只能 是简单的引用类型,不能是复杂的嵌套,或者对象

下面的就不可以
get
params

{
      name: "",
      createTime: " ",
      type: {
                [{  level: "",
                   name: [ value,value2]
                  },
                  
                  { levle:"",
                   name: [ value,value2,value3]
                  },
                  
                  { level: "",
                  name: [ value]
                  }
           ]
       }
}

这个就是对象里面嵌套一个数组对象,get 此时就无能为力,只能报400,所以说还是用原配的好。

总结

get 加Body 传参的实质就是,提交个表格对象,form表单的形式绑定

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值