網(wǎng)站版本功能列表seo免費資源大全
背景
前后端分離情況下,后端接口通常只需要返回JSON數(shù)據(jù)。
但有時候因為某些原因可能會導致得不到正確的結(jié)果。
比如
因為登錄密碼錯誤,你不能直接返回錯誤信息和null,這樣前端很難處理。
又比如
因為后端接口爆出了異常,也不能直接把異常信息返回給前端。
我們需要給返回結(jié)果包上一層:
{ code: 0, message = "信息", data = 返回結(jié)果}
- code :用于判斷響應類型。
- message :用于顯示錯誤信息。
- data : 返回響應結(jié)果
SpringBoot配置
1、定義通用的響應體 - MyResponse
public record MyResponse<T>(int code,String message,T data) {}
2、定義響應處理器 - MyResponseHandler
將返回結(jié)果封裝到MyResponse實例。
@RestControllerAdvice
public class MyResponseHandler implements ResponseBodyAdvice<Object> {@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {//如果返回true,就可以不對這個returnType進行增強return false;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 如果是MyResponse直接返回if (body instanceof MyResponse) {return body;}if (body instanceof String) {return body;}return new MyResponse(0,null,body);}
}
3、定義異常響應處理器 - MyResponseHandler
@ExceptionHandler :攔截某個異常,對該異常進行處理,返回處理后的信息
@RestControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(IOException.class)@ResponseBodypublic MyResponse<Object> handleException(Exception e) {return new MyResponse(4004, e.getMessage(), null);}
}
這樣簡單的響應配置就做好,在實際項目還需要根據(jù)自己需求進行處理。