spring接受参数注解的基本解释前后端都要会

114 阅读3分钟

image.png

最近代码写的不是很快乐,总体原因就是接口对接让人头大,我说我的,后端说他的,但是他自己也不懂这些是个啥

最关键的是参数接受怎么写是不知道的

后端:我写好了,接口给你/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不是错误不用管

然后我:那是怎么传的,我看一下

看了以后,我知道了

image.png

这样就正确了

我们来看一下各个注解的用法

这里就讲一下这些注解接受参数的形式,没有讲为什么哈

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

那么这个请求就是这样的

image.png

删掉一个

@PostMapping("/RequestBody")
public String RequestBody(@RequestBody String[] ids){
    System.out.println("ids = " + Arrays.toString(ids));
    return ids[0];
}

image.png

image.png

请求就正常了

下一个

@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路径参数

image.png

image.png

可以看到,我们url参数被解析到了ids里面,不仅仅是这样,后面的两个对象里面也被解析进去了,这里要注意使用对象就不要加这个注解,不然报错

formData参数

后端不用改,还是可以直接用,这里只是前端改了传参的形式

image.png

image.png

form-url...

后端没有改,也是可以直接接

image.png

image.png

@PathVariable

路径参数,这个用法就一种,就是把url的一节当作变量,我是反对用这个的,要是你这一截没有传系统就会404,而不是报错,这样就产生了一个系统错误

@PostMapping("/PathVariable/{path}")
public String PathVariable(@PathVariable String path){
    System.out.println("path = " + path);
    return path;
}

image.png

image.png

如果我们没有传入这个参数,就会直接404,而且后端什么反应都没有,虽然很resultful风格,但是这种问题是能避免就避免

image.png

image.png

总结

springboot中,这几个注解就是接受参数用的,然后混合使用都是可以的,但是现在就是有的后端这个东西都不知道怎么用,我都不知道说什么,人都麻了

个人表示,不管是前端还是后端,对于这些应该是要有一定了解,毕竟工作上80%甚至更多都是和这个打交道,尤其是现在前后端分离的项目,更是

最后

欢迎关注公众号致心空间:O(∩_∩)O😁

致心空间