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
}
]
}