response.body={
token:'xxxxxxxxxx'
}
2 客户端获取到token后,ajax可以设置request header,如:
$ajax({
headers:{
token:刚刚接受到的token
}
url:'xxxxx'
})
【优雅的解决问题】
一、 问题场景
我们在研发过程中普遍会遇到一种情况,一个请求过来,会同时用到body和header里面的参数,如果分别从body和header中获取参数的话,简直Low到爆!!!在这儿给各位支个招。
二、 解决方案
构建思路:自定义注解 + 自定义参数解析器 + 注册解析器
1 自定义注解 RequestBodyAndHeader
2 自定义参数解析器 RequestBodyAndHeaderResolver
红色框标出了两部分重点:
重点1: 合并Body和Header中的参数,其中使用BeanUtils.populate的特性来处理此场景;
重点2:判断是否支持我们自定义的RequestBodyAndHeader。
3 在配置文件中 注册自定义的参数解析器
4 定义测试用的参数对象
5 定义测试接口
6 通过Postman测试可用性
6.1 设置header参数和content-type
6.2 设置对象参数
6.3 提交请求
查看程序打印结果,Bingo!header携带的参数自动赋值到了对象中。
三、简单总结
这里主要是运用RequestResponseBodyMethodProcessor的特性来解决问题,关于其细节可参考官方的API文档。
极客架构176粉丝
关注
Spring boot 2 中 重写Request 参数或添加Header 的正确姿势
极客架构
2019-09-25 06:40软件工程师,科技领域爱好者
关注
背景
由于公司架构调整,调整后Header参数发生变化,前端调用时参数名称发生变化,但这个参数在controller层已经定义,如果调整代码工作量很大。
解决思路
在过滤器(Filter)中,接收到Header参数后,把调整后的参数取出,生成一个新的参数添加至Header中。由于Filter在Controller之前执行,所以Controller感知不到参数发生变化。
HttpServletRequestWrapper
继承结构
查看 HttpServletRequestWrapper 继承关系,可以发现HttpServletRequestWrapper 实现了 ServletRequest .
Filter接口方法dofFilter中 处理Request请求的类型就是ServletRequest 。
Filter接口的方法
重写HttpServletRequestWrapper
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)