Spring boot参数接收调研

Spring boot参数接收

根据调研目前前后端分离下主要常用的请求类型有两种 Get请求和Post请求两种
Get请求:

先介绍一下有关Get请求的相关参数接收
由于Get请求是直接在请求url链接后面加入查询字符串
简单请求:http://localhost:8080/version/all?startPage=1&pageSize=10
这种简单的Springboot的接收方式就不介绍了
带数组的请求:http://localhost:8080/version/findbatch?ids=1,2,3,4,5

    @GetMapping("/version/findbatch")
    public Integer[] findbatch(Integer[] ids) {
        return ids;
    }

    <!-- 或者 注意使用List接收时需要加@RequestParam注解-->
    
    @GetMapping("/version/findbatch")
    public List<Long> findbatch(@RequestParam("ids") List<Long> ids) {
        return ids;
    }

这样就能直接接收
因此Get请求接受数组这样的类型还是很简单的
有人可能会问一些复杂类型的集合对象该如何接收?这里是推荐使用post请求进行传输

Post请求:

接下来介绍一下Post请求下的参数接收
目前Post请求常见的Content-Type请求内容类型分为两种 分别是application/x-www-form-urlencoded和application/json

参考链接:https://blog.csdn.net/xu990128638/article/details/88690402

根据我的调查和使用给出一个比较方便合理的使用说明
总结下来就是简单的数据传输直接使用formdata的形式进行前后端通信,复杂的情况则使用@RequestBody注解标识后用对象进行接受json数据

因为可以用来接收的方式实在是太多了而且五花八门 这里我主要介绍两种接收情况

(PS:通过与smart-doc的开发者沟通得知为了规范接口,不支持form data的嵌套传输数据 而且他们的项目是全栈Json,前后端通讯都是用的Json,像简单地如几个参数则通过path进行传输)

第一种:传递参数都是key-value的情况,不论value是不是数组都能够类似这样来接收,只要value不是一个对象集合就好 那种参数比较复杂的还是推荐使用json进行传输。
   /**
     *
     * @param names
     * @param id1s
     * @param text
     * @param id2s
     * @return
     */
    @PostMapping("/test")
    public String test(String[] names, Long[] id1s, String text, @RequestParam(value = "id2s",required = false) List<String> id2s ) {
        System.out.println(Arrays.toString(id1s));
        System.out.println(id2s);
        return "ok";
    }

RequestParam:
    text : demoData
    names:sffasf,afasfasf,asfasf
    id1s:1,5,48,464,87494,64
    id2s:1,54,87,464,989,46,1,894,98

Postman测试方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfSO9vbA-1610896344912)(https://i.bmp.ovh/imgs/2020/12/104a31be6a9e6ac5.png)]

axios参考链接: FormData表单请求方式

第二种:传递的参数较为复杂类似这样的 使用Json会方便一点

参考链接1:https://blog.csdn.net/chengluchuang2753/article/details/102798129
参考链接2:https://blog.csdn.net/weixin_41878312/article/details/98029944

//json参数
{
    "opt":"test",
    "elements":[{"columnsName":"test1"},{"columnsName":"test2"}]
}

这种情况推荐使用json进行前后端数据交互
这里给个示例用到了静态内部类 这里只是举个例子具体应用场景需要自行构建数据结构

 /**
     * jsonRequestTest
     * @param jsondata
     * @return
     */
    @PostMapping("/jsontest")
    public String jsontest(@RequestBody Element jsondata) {
        System.out.println(jsondata.toString());
        return "ok";
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    static class Element {
        private String name;
        private List<Component> components;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    static class Component {
        private String name;
        private Long hp;
    }
json格式的requestBody:
{
  "name": "boss",
  "components": [{
    "name": "hand",
    "hp": 10
  },
  {
    "name": "foot",
    "hp": 10
  }
  ]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值