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

JavaEE中统一修改http响应体内容的方法

2021-10-02 09:31 作者:向上生长之路  | 我要投稿

在之前的文章中介绍过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


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

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