最近代码写的不是很快乐,总体原因就是接口对接让人头大,我说我的,后端说他的,但是他自己也不懂这些是个啥
最关键的是参数接受怎么写是不知道的
后端:我写好了,接口给你/test/post,传入ids和id就行了,是一个post
然后怎么传的不知道
我:我调用了,报错(我心里想,既然是post,那么ids和id就是放在一个对象里面的)
我传的形式
{
"ids": [
"ssssss",
"ttttttt"
],
"id": "6666"
}
后端定义的:
@PostMapping("/post")
public String post(@RequestBody String[] ids, @RequestParam String id){
System.out.println("ids = " + Arrays.toString(ids));
System.out.println("id = " + id);
return "完成";
}
报错信息:
前端:
{
"timestamp": "2023-03-23T06:17:40.218+00:00",
"status": 400,
"error": "Bad Request",
"path": "/test/post"
}
后端:无,但是有一个warn,warn不是错误不用管
然后我:那是怎么传的,我看一下
看了以后,我知道了
这样就正确了
我们来看一下各个注解的用法
这里就讲一下这些注解接受参数的形式,没有讲为什么哈
@RequestBody
这个注解标识接受body里面的json参数,一个请求方法里面只能有一个这个。当然,这个位置有个很重要的请求头要注意,就是标识你的body是一个json
content-type | application/json
不过这个现在基本不用管,前端的请求axios已经封装了,会自动判断你传入的是不是formData进行修改
如果你非要定义两个
@PostMapping("/RequestBody")
public String RequestBody(@RequestBody String[] ids,@RequestBody String[] ids2){
System.out.println("ids = " + Arrays.toString(ids));
System.out.println("ids2 = " + Arrays.toString(ids2));
return ids[0];
}
那么这个请求就是这样的
删掉一个
@PostMapping("/RequestBody")
public String RequestBody(@RequestBody String[] ids){
System.out.println("ids = " + Arrays.toString(ids));
return ids[0];
}
请求就正常了
下一个
@RequestParam
这个就厉害了,能接受的类型很多,而且不限制个数,并且你没有写默认就是用这个的
package top.xzxsrq.springboot.params;
import lombok.Data;
@Data
public class Params {
private String ids;
}
@PostMapping("/RequestParam")
public String RequestParam(@RequestParam String ids,Params params, Params params2){
System.out.println("ids = " + ids);
System.out.println("params.getIds() = " + params.getIds());
System.out.println("params2.getIds() = " + params2.getIds());
return ids;
}
url路径参数
可以看到,我们url参数被解析到了ids里面,不仅仅是这样,后面的两个对象里面也被解析进去了,这里要注意使用对象就不要加这个注解,不然报错
formData参数
后端不用改,还是可以直接用,这里只是前端改了传参的形式
form-url...
后端没有改,也是可以直接接
@PathVariable
路径参数,这个用法就一种,就是把url的一节当作变量,我是反对用这个的,要是你这一截没有传系统就会404,而不是报错,这样就产生了一个系统错误
@PostMapping("/PathVariable/{path}")
public String PathVariable(@PathVariable String path){
System.out.println("path = " + path);
return path;
}
如果我们没有传入这个参数,就会直接404,而且后端什么反应都没有,虽然很resultful风格,但是这种问题是能避免就避免
总结
springboot中,这几个注解就是接受参数用的,然后混合使用都是可以的,但是现在就是有的后端这个东西都不知道怎么用,我都不知道说什么,人都麻了
个人表示,不管是前端还是后端,对于这些应该是要有一定了解,毕竟工作上80%甚至更多都是和这个打交道,尤其是现在前后端分离的项目,更是
最后
欢迎关注公众号致心空间:O(∩_∩)O😁