JavaEE中统一修改http响应体内容的方法
在之前的文章中介绍过Spring Boot开发中统一修改http响应体内容的方法

今天给大家再介绍另一种方案也能实现同样的效果,那就是JavaEE中通过使用Filter过滤器来修改http响应体~
工作原理
JavaEE中提供了HttpServletResponseWrapper,该类实现了HttpServletResponse接口,通过重写该类的getOutputStream、getWriter方法来拦截Servlet响应内容,结合Filter的使用,就可以在Filter中统一修改http响应体了
JavaEE官方文档说明:https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponseWrapper.html

使用方式
1. 编写HttpServletResponseWrapper的实现类,来包装HttpServletResponse,等下在Filter中会用于替换真正的HttpServletResponse对象
示例代码:https://github.com/netbuffer/javaee-demo/blob/master/src/main/java/cn/netbuffer/filter/wrapper/ModifyHttpResponseWrapper.java
2. 编写Filter过滤器来拦截http响应,达到最终修改http响应体的目的
示例代码:https://github.com/netbuffer/javaee-demo/blob/master/src/main/java/cn/netbuffer/filter/ModifyHttpResponseFilter.java
3. 编写测试用的Servlet,来测试http响应体改写情况
完整示例代码:https://github.com/netbuffer/javaee-demo/blob/master/src/main/java/cn/netbuffer/servlet/JSONServlet.java
运行效果
启动工程,使用Postman工具访问/json接口测试
可以看到返回的数据中已经被wrapper[]包装了


完整测试工程请参考:https://github.com/netbuffer/javaee-demo
明白了原理,JavaEE中的这种机制我们完全可以用在Spring Boot开发中~
示例伪代码:
示例过滤器,在doFilter中做自定义的逻辑处理,可以达到统一修改http响应体的效果~
完整代码写法可以参考我在spring-boot-admin issue中的回答:https://github.com/codecentric/spring-boot-admin/issues/1053#issuecomment-920630443