我有一個用@ControllerAdvice 注釋的類和用@ExceptionHandler 注釋的方法來處理服務代碼拋出的例外。在處理這些例外時,我想獲得作為請求 POST 操作一部分的 @RequestBody。
我嘗試為發送的請求創建 POJO 類,并嘗試在例外處理程式類中檢索,但它回傳 null。
遵循此查詢中給出的相同解決方案?如何在@ExceptionHandler(Spring REST)中獲取@RequestBody
它不起作用。
我也嘗試使用 httpServertRequest,即使請求資料回傳 null。
我想在 ExceptionHandler 方法中獲取 api 的請求正文。根據請求正文資料,我必須回傳錯誤回應。
我還希望在 ExceptionHandler 方法中使用查詢引數資料。
請提供解決方案。謝謝你。
uj5u.com熱心網友回復:
Request Body 的 Stream 只讀取一次,所以不能在 ControllerAdvice 內第二次取回,所以先用 ContentCachingRequestWrapper 快取請求體。像這樣創建一個新的 Spring 組件:
@Component
public class FilterConfig extends GenericFilterBean{
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{
HttpServletRequest request = (HttpServletRequest) servletRequest;
ContentCachingRequestWrapper wrapper = new ContentCachingRequestWrapper(request);
filterChain.doFilter(wrapper, servletResponse);
}
}
然后在 @ControllerAdvice 讓你的 @ExceptionHandler 接受 ContentCachingRequestWrapper 作為引數。
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleDefaultException(Exception ex, ContentCachingRequestWrapper request){
String reqBody = "your request body is " new String(request.getContentAsByteArray(), StandardCharsets.UTF_8);
// then do another thing you wanted for exception handling
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491186.html
上一篇:顫振設定行的寬度
