欢迎光临散文网 会员登陆 & 注册

spring-boot中统一修改http响应体内容的方法

2021-09-25 22:43 作者:向上生长之路  | 我要投稿

在spring-boot开发中,有时候会遇到一些统一修改http接口响应体内容的场景,比如统一增加一些响应头信息、统一增加一些数据包装处理、数据转换等场景,spring框架中已经为我们提供了这种能力,即ResponseBodyAdvice切面的使用,ResponseBodyAdvice就是spring框架中预留的钩子,它作用在Controller方法执行完成之后,http响应体写回客户端之前,这个时候我们就能方便的织入一些自己的业务逻辑处理了

工作原理

查看ResponseBodyAdvice接口的源码中,提供了两个方法

  • supports方法用于判断beforeBodyWrite方法的执行与否,返回值为布尔类型,返回true即执行beforeBodyWrite方法;可以在实现类中编写实现逻辑,来根据MethodParameter以及HttpMessageConverter类型判断是否需要改写http响应体

  • beforeBodyWrite方法提供了用于修改http响应体的能力,我们要编写的核心逻辑就是这个方法所在了,该方法中提供了Controller方法的返回值,ServerHttpRequest 、ServerHttpResponse 对象等,在实现类方法中,我们拿到这些对象,根据需要来编写修改逻辑


使用方式

  1. 自定义一个实现ResponseBodyAdvice接口的实现类,添加注解@ControllerAdvice,来拦截Controller控制器的执行

示例代码:https://github.com/netbuffer/spring-boot-demo/blob/master/src/main/java/cn/netbuffer/springboot/demo/controller/CustomResponseBodyAdvice.java


2. 建立测试用的控制器UserAgentController,用于返回User-Agent头信息
示例代码:https://github.com/netbuffer/spring-boot-demo/blob/master/src/main/java/cn/netbuffer/springboot/demo/controller/UserAgentController.java


3. 建立测试用于返回Map类型数据的映射方法
完整示例代码:https://github.com/netbuffer/spring-boot-demo/blob/master/src/main/java/cn/netbuffer/springboot/demo/controller/BeanController.java


运行效果

使用Postman工具访问/ua接口测试
可以看到返回的数据中已经被[]包装了



再查看返回的http响应头中,能看到我们添加的x-abc响应头



再访问map接口查看结果,可以看到有多余的extData字段被添加进去了


完整测试工程参考:https://github.com/netbuffer/spring-boot-demo

spring-boot中统一修改http响应体内容的方法的评论 (共 条)

分享到微博请遵守国家法律