【优雅的解决问题】
一、问题场景
我们在研发过程中普遍会遇到一种情况,一个请求过来,会同时用到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文档。