springMVC Controller中的几个注释

这是一个方法

@PostMapping("/aaa/{code}")
    public JsonResult<Object> download(@PathVariable("code") String code,
                                       @RequestAttribute("user_id") String userId,
                                       @RequestParam("token") String token,throws IOException {
     //add something
                                       }

1、@RequestHeader
使用场景:将请求头中的参数值映射到控制器的参数中
  Spring MVC提供了 @RequestHeader注解,其作用是将请求头中的参数值映射到控制器的参数中。常用属性如下:

name:header值被绑定到的参数名称(The name of the request header to bind to)。只有此属性时,可以省略name,简写为@RequestHeader(“host”)。
required:boolean类型,默认为true,即请求头中必须包含此参数。
defaultParameter:为请求头中的参数提供默认值,如果拿不到之,就将此值赋给控制器的参数。

2、@RequestAttribute
使用场景:从request中取对应的属性值。 注意:属性和参数是不同的。

很多小伙伴可能对 参数(parameter)和属性(Attribute)的区别不是很了解。简单一句话,参数是需要用户或者浏览器传,属性是我们拦截请求写入或者修改的。比如:httpServletRequest.setAttribute(name, value))
如果我们想在controller层中获取绑定属性值到一个参数,此时就可以使用@RequestAttribute,
具体了解参数(parameter)和属性(Attribute)的区别参考下文:

参数(parameter)和属性(Attribute)的区别

我们一般前后端分离开发每次请求都会携带一些固定的参数,例如: 租户id,坐席 id,我们会将这些固定参数放在 header 中,这时我们就可以使用过滤器来拦截请求,然后将取到的参数可以放到 request 或者 session 作用域中,在 controller 中我们就可以使用 @RequestAttribute 或者 @SessionAttribute 注解来获取值

@RequestAttribute注解的参数在项目里是自己解析出来的,并不是前端传递的。
具体一点,在项目里的拦截器里会对Token信息进行解析,解析出来的参数重新放在请求里(用httpServletRequest.setAttribute(name, value)),后边接口接收参数时就用这个注解。

接下来这句话很重要:@RequestAttribute只负责从request里面取属性值,至于你什么时候往里放值,是有多种方式的可以达到的:

1、@ModelAttribute注解预存
2、HandlerInterceptor拦截器中预存
3、请求转发带过来

扩展
在写http接口的时候,发现接口参数有两种注解,一种是@RequestAttribute,一种是@Requestparam,自己刚开始没明白区别,用postman调试的时候一直报错,后来才发现这个问题。

@RequestAttribute注解的参数在项目里是自己解析出来的,并不是前端传递的。具体一点,在项目里的拦截器里会对Token信息进行解析,解析出来的参数重新放在请求里(用httpServletRequest.setAttribute(name, value)),后边接口接收参数时就用这个注解。
@RequestParam注解则表示这个参数是通过前端传递过来的,如果请求里没有这个参数,则会报错400 Bad Request。这个注解用来解析请求路径里的参数(get请求)或者post请求中form表单格式的请求参数;
@RequestBody注解用来接收POST请求BODY里的参数,格式为JSON格式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值