【玩转SpringBoot】优雅的整合Body和Header参数
2019-05-10 本文已影响0人
夏天的风风风
【优雅的解决问题】
一、问题场景
我们在研发过程中普遍会遇到一种情况,一个请求过来,会同时用到body和header里面的参数,如果分别从body和header中获取参数的话,简直Low到爆!!!在这儿给各位支个招。
二、解决方案
构建思路:自定义注解 + 自定义参数解析器 + 注册解析器
1 自定义注解 RequestBodyAndHeader
![](https://img.haomeiwen.com/i9618984/2978d14bd3cfdf29.png)
2 自定义参数解析器 RequestBodyAndHeaderResolver
![](https://img.haomeiwen.com/i9618984/9ddb66842cab514c.png)
红色框标出了两部分重点:
重点1: 合并Body和Header中的参数,其中使用BeanUtils.populate的特性来处理此场景;
重点2:判断是否支持我们自定义的RequestBodyAndHeader。
3 在配置文件中 注册自定义的参数解析器
![](https://img.haomeiwen.com/i9618984/690353debb6984d7.png)
4 定义测试用的参数对象
![](https://img.haomeiwen.com/i9618984/d11b85d8f9320f61.png)
5 定义测试接口
![](https://img.haomeiwen.com/i9618984/a284c3502c138fd9.png)
6 通过Postman测试可用性
6.1 设置header参数和content-type
![](https://img.haomeiwen.com/i9618984/8ec5f80f66e543be.png)
6.2 设置对象参数
![](https://img.haomeiwen.com/i9618984/454be70d771f9e29.png)
6.3 提交请求
![](https://img.haomeiwen.com/i9618984/c66109fdbb755a44.png)
查看程序打印结果,Bingo!header携带的参数自动赋值到了对象中。
三、简单总结
这里主要是运用RequestResponseBodyMethodProcessor的特性来解决问题,关于其细节可参考官方的API文档。