ResponseBodyAdvice攔截Controller方法默認返回參數,統一處理返回值/響應體


 背景:
       公司小程序項目改造需要后端接口統一數據返回 原來的封裝數據返回格式不適合需要改造  老項目幾百個接口 一個個改接口肯定不行。
       后來制定兩套方案 一種 攔截器 另一種 ResponseBodyAdvice后來選擇了ResponseBodyAdvice 
      為什么不使用攔截器?因為之前的接口統一規范了@ResponseBody帶@RestController的類和帶@ResponseBody的方法在被調用后response會直接寫入輸出流,在postHandle和afterCompletion這兩個方法執行之前就已經把數據返回,導致這兩個方法里面的response根本獲取不到響應數據。
      而ResponseBodyAdvice攔截Controller方法默認返回參數,統一處理返回值/響應體  ResponseBodyAdvice可以在注解@ResponseBody將返回值處理成相應格式之前操作返回值。實現這個接口即可完成相應操作。

 

import com.alibaba.fastjson.JSON;import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import java.util.Objects;

@ControllerAdvice
public class XcxResponseBodyAdvice implements ResponseBodyAdvice {

/** * supports方法是來給定條件判斷是否該調用beforeBodyWrite,MethodParameter里面有各種數據, **/ @Override public boolean supports(MethodParameter methodParameter, Class aClass) { return true; } /** * 響應結果攔截根據業務去封裝返回體 **/ @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { log.biz("構造結果" + JSON.toJSONString(o)); return o; } }

原文傳送:https://blog.csdn.net/weixin_43647964/article/details/107298537 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM