GlobalResponseAdvice.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.oms.common;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.core.MethodParameter;
  4. import org.springframework.http.HttpStatus;
  5. import org.springframework.http.MediaType;
  6. import org.springframework.http.ResponseEntity;
  7. import org.springframework.http.converter.HttpMessageConverter;
  8. import org.springframework.http.server.ServerHttpRequest;
  9. import org.springframework.http.server.ServerHttpResponse;
  10. import org.springframework.http.server.ServletServerHttpRequest;
  11. import org.springframework.web.bind.annotation.ExceptionHandler;
  12. import org.springframework.web.bind.annotation.RestControllerAdvice;
  13. import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
  14. import jakarta.servlet.http.HttpServletRequest;
  15. @Slf4j
  16. @RestControllerAdvice
  17. public class GlobalResponseAdvice implements ResponseBodyAdvice<Object> {
  18. @Override
  19. public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
  20. String className = returnType.getDeclaringClass().getName();
  21. return className.startsWith("com.oms.controller");
  22. }
  23. @Override
  24. public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType contentType,
  25. Class<? extends HttpMessageConverter<?>> converterType,
  26. ServerHttpRequest request, ServerHttpResponse response) {
  27. if (body == null) {
  28. return ApiResponse.success();
  29. }
  30. if (body instanceof ApiResponse) {
  31. return body;
  32. }
  33. if (body instanceof ResponseEntity) {
  34. ResponseEntity<?> re = (ResponseEntity<?>) body;
  35. return ApiResponse.success(re.getBody());
  36. }
  37. return ApiResponse.success(body);
  38. }
  39. @ExceptionHandler(Exception.class)
  40. public ApiResponse<Void> handleException(Exception e, HttpServletRequest request) {
  41. log.error("接口 {} 异常: {}", request.getRequestURI(), e.getMessage(), e);
  42. return ApiResponse.serverError("服务器内部错误: " + e.getMessage());
  43. }
  44. @ExceptionHandler(IllegalArgumentException.class)
  45. public ApiResponse<Void> handleIllegalArgument(IllegalArgumentException e, HttpServletRequest request) {
  46. return ApiResponse.badRequest(e.getMessage());
  47. }
  48. @ExceptionHandler(NullPointerException.class)
  49. public ApiResponse<Void> handleNullPointer(NullPointerException e, HttpServletRequest request) {
  50. log.error("接口 {} 空指针异常: {}", request.getRequestURI(), e.getMessage(), e);
  51. return ApiResponse.serverError("数据不存在或未初始化");
  52. }
  53. }