package com.technology.huahai.common.handler; import com.technology.huahai.common.core.controller.domain.AjaxResult; import com.technology.huahai.common.exception.CsmException; import com.technology.huahai.common.exception.CsmTokenException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.client.ResourceAccessException; import org.springframework.web.context.request.WebRequest; import java.util.HashMap; import java.util.Map; @ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(CsmException.class) public ResponseEntity resourceNotFoundException(CsmException ex, WebRequest request) { logger.error("Unexpected exception occurred: ", ex); return new ResponseEntity<>(AjaxResult.error(ex.getMessage()), HttpStatus.OK); } @ExceptionHandler(CsmTokenException.class) public ResponseEntity tokenException(CsmTokenException ex, WebRequest request) { logger.error("token exception occurred: ", ex); return new ResponseEntity<>(AjaxResult.error(ex.getMessage()), HttpStatus.UNAUTHORIZED); } @ExceptionHandler(MissingServletRequestParameterException.class) public ResponseEntity MissingRequestParameterException(MissingServletRequestParameterException ex, WebRequest request) { logger.error("token exception occurred: ", ex); String message = ex.getParameterName() + "参数缺失"; return new ResponseEntity<>(AjaxResult.error(message), HttpStatus.OK); } @ExceptionHandler(ResourceAccessException.class) public ResponseEntity rpcException(ResourceAccessException ex, WebRequest request) { logger.error("远程调用异常: ", ex); return new ResponseEntity<>(AjaxResult.error("远程调用异常"), HttpStatus.INTERNAL_SERVER_ERROR); } @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity paramCheckException(MethodArgumentNotValidException ex, WebRequest request) { Map errors = new HashMap<>(); ex.getBindingResult().getAllErrors().forEach((error) -> { String fieldName = ((FieldError) error).getField(); String errorMessage = error.getDefaultMessage(); errors.put(fieldName, errorMessage); }); String res = String.join(",", errors.values()); return new ResponseEntity<>(AjaxResult.error(res), HttpStatus.OK); } // 处理所有其他异常 @ExceptionHandler(Exception.class) public ResponseEntity globalExceptionHandler(Exception ex, WebRequest request) { logger.error("Unexpected exception occurred: ", ex); return new ResponseEntity<>(AjaxResult.error(ex.getClass().toString()), HttpStatus.INTERNAL_SERVER_ERROR); } }