| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package com.oms.common;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.core.MethodParameter;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.MediaType;
- import org.springframework.http.ResponseEntity;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.http.server.ServerHttpRequest;
- import org.springframework.http.server.ServerHttpResponse;
- import org.springframework.http.server.ServletServerHttpRequest;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.RestControllerAdvice;
- import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
- import jakarta.servlet.http.HttpServletRequest;
- @Slf4j
- @RestControllerAdvice
- public class GlobalResponseAdvice implements ResponseBodyAdvice<Object> {
- @Override
- public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
- String className = returnType.getDeclaringClass().getName();
- return className.startsWith("com.oms.controller");
- }
- @Override
- public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType contentType,
- Class<? extends HttpMessageConverter<?>> converterType,
- ServerHttpRequest request, ServerHttpResponse response) {
- if (body == null) {
- return ApiResponse.success();
- }
- if (body instanceof ApiResponse) {
- return body;
- }
- if (body instanceof ResponseEntity) {
- ResponseEntity<?> re = (ResponseEntity<?>) body;
- return ApiResponse.success(re.getBody());
- }
- return ApiResponse.success(body);
- }
- @ExceptionHandler(Exception.class)
- public ApiResponse<Void> handleException(Exception e, HttpServletRequest request) {
- log.error("接口 {} 异常: {}", request.getRequestURI(), e.getMessage(), e);
- return ApiResponse.serverError("服务器内部错误: " + e.getMessage());
- }
- @ExceptionHandler(IllegalArgumentException.class)
- public ApiResponse<Void> handleIllegalArgument(IllegalArgumentException e, HttpServletRequest request) {
- return ApiResponse.badRequest(e.getMessage());
- }
- @ExceptionHandler(NullPointerException.class)
- public ApiResponse<Void> handleNullPointer(NullPointerException e, HttpServletRequest request) {
- log.error("接口 {} 空指针异常: {}", request.getRequestURI(), e.getMessage(), e);
- return ApiResponse.serverError("数据不存在或未初始化");
- }
- }
|