赞
踩
Swagger版本:3.0.0
SpringBoot版本: 2.7.1
最近项目中遇到需要在controller 层 获取header 中 参数的场景。一开始使用@RequestAttribute 接收参数,后续断点发现无法接收header中参数。且@RequestAttribute 和 @RequestBody 注解结合使用时,会出现swagger 注解@ApiModel 失效的问题,导致请求体在swagger-UI中不显示。改为@RequestHeader 后该失效问题得到解决。
下面讲讲这两个注解的使用场景。
使用场景:将请求头中的参数值映射到控制器的参数中
Spring MVC提供了 @RequestHeader注解,其作用是将请求头中的参数值映射到控制器的参数中。常用属性如下:
name:header值被绑定到的参数名称(The name of the request header to bind to)。只有此属性时,可以省略name,简写为
@RequestHeader(“host”)。
required:boolean类型,默认为true,即请求头中必须包含此参数
。
defaultParameter:为请求头中的参数提供默认值,如果拿不到之,就将此值赋给控制器的参数。
使用场景:从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格式。
具体可参考下文:
https://blog.csdn.net/forthenight996/article/details/122746305
https://blog.csdn.net/HSH205572/article/details/85295622
https://blog.csdn.net/weixin_45614626/article/details/108510486?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-108510486-blog-122746305.pc_relevant_multi_platform_whitelistv2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-108510486-blog-122746305.pc_relevant_multi_platform_whitelistv2&utm_relevant_index=1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。