springboot如何设置header属性,使下一次request header携带此属性过来呢?

springboot如何设置header属性,使下一次request header携带此属性过来呢?,第1张

1 服务端响应一次数据 ,将此数据暂时放到body中,如:

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11422245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存