@RequestBody
写着写着忘记了mvc这几个常用的注解的作用,一时有点凝噎。
为什么get请求不用加@RequestBody也能接收到参数,post请求不加@RequestBody就接收不到参数?
这是因为HTTP协议规定了请求方式对应的数据传递方式不同。对于GET请求,参数通常通过URL的查询字符串传递,也就是在URL后面添加?key1=value1&key2=value2
这样的查询字符串。Spring MVC会自动将查询字符串中的参数解析到方法的参数上,所以不需要加@RequestBody
注解。
而对于POST请求,请求体中的数据是通过HTTP报文的正文部分进行传输的,而不是在URL中添加查询字符串。在这种情况下,Spring MVC并不会自动将请求体中的数据解析到方法的参数上。如果想要将请求体中的数据绑定到方法的参数上,就需要使用@RequestBody
注解。
而如果我们POST请求的接口参数不是java对象而是普通的参数就不用加@RequestBody注解啦
@RequestParam
@RequestParam注解是Spring框架中的一个注解,用于将HTTP请求中的参数绑定到Controller中的方法参数上。具体作用如下:
-
绑定请求参数:可以将HTTP请求中的参数绑定到方法的参数上,方便在Controller中获取请求参数。
-
设置默认值:可以通过设置defaultValue属性来设置参数的默认值,当请求中没有传递该参数时,将使用默认值。
-
指定参数名:可以通过设置value属性来指定参数的名称,当请求中参数名与方法参数名不一致时,可以通过该属性来指定。
-
必填参数:可以通过设置required属性来指定参数是否为必填参数,当请求中没有传递该参数且required为true时,将会返回错误信息。
-
支持多个参数:当请求中存在多个同名参数时,可以通过设置@RequestParam注解的multiValue属性来获取所有参数值。
-
其他属性:@RequestParam注解还支持其他属性,如allowEmptyValue、defaultValueString等,用于进一步控制参数绑定的行为。
@PathVariable
如果前端请求参数是拼接在路径中的我们可以采用@PathVariable注解进行参数绑定
例如/content/tag/{id}可以写成下面的接口样式
@DeleteMapping("/{id}")public ResponseResult deleteTag(@PathVariable("id") Long id){return tagService.deleteTag(id);}
如果是多个参数格式应该这么写:
@DeleteMapping("/{id}/{name}")
public ResponseResult deleteTag(@PathVariable("id") Long id, @PathVariable("name") String name){// 根据id和name删除标签,并返回结果
}
在上述代码中,@DeleteMapping注解的路径中有两个占位符{id}和{name},表示该接口路径中有两个参数。在方法体中,使用@PathVariable注解将这两个占位符绑定到方法的两个参数上,即id和name。这样,当客户端请求时,路径中的{id}和{name}就会被替换为具体的参数值,并传递给后端接口方法。