JavaEE中統(tǒng)一修改http響應體內容的方法
在之前的文章中介紹過Spring Boot開發(fā)中統(tǒng)一修改http響應體內容的方法

今天給大家再介紹另一種方案也能實現(xiàn)同樣的效果,那就是JavaEE中通過使用Filter過濾器來修改http響應體~
工作原理
JavaEE中提供了HttpServletResponseWrapper,該類實現(xiàn)了HttpServletResponse接口,通過重寫該類的getOutputStream、getWriter方法來攔截Servlet響應內容,結合Filter的使用,就可以在Filter中統(tǒng)一修改http響應體了
JavaEE官方文檔說明:https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponseWrapper.html

使用方式
1. 編寫HttpServletResponseWrapper的實現(xiàn)類,來包裝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接口測試
可以看到返回的數(shù)據(jù)中已經(jīng)被wrapper[]包裝了


完整測試工程請參考:https://github.com/netbuffer/javaee-demo
明白了原理,JavaEE中的這種機制我們完全可以用在Spring Boot開發(fā)中~
示例偽代碼:
示例過濾器,在doFilter中做自定義的邏輯處理,可以達到統(tǒng)一修改http響應體的效果~
完整代碼寫法可以參考我在spring-boot-admin issue中的回答:https://github.com/codecentric/spring-boot-admin/issues/1053#issuecomment-920630443