GlobalExceptionHandler.java 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package com.technology.huahai.common.handler;
  2. import com.technology.huahai.common.core.controller.domain.AjaxResult;
  3. import com.technology.huahai.common.exception.CsmException;
  4. import com.technology.huahai.common.exception.CsmTokenException;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.http.HttpStatus;
  8. import org.springframework.http.ResponseEntity;
  9. import org.springframework.validation.FieldError;
  10. import org.springframework.web.bind.MethodArgumentNotValidException;
  11. import org.springframework.web.bind.MissingServletRequestParameterException;
  12. import org.springframework.web.bind.annotation.ControllerAdvice;
  13. import org.springframework.web.bind.annotation.ExceptionHandler;
  14. import org.springframework.web.client.ResourceAccessException;
  15. import org.springframework.web.context.request.WebRequest;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18. @ControllerAdvice
  19. public class GlobalExceptionHandler {
  20. private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  21. @ExceptionHandler(CsmException.class)
  22. public ResponseEntity<?> resourceNotFoundException(CsmException ex, WebRequest request) {
  23. logger.error("Unexpected exception occurred: ", ex);
  24. return new ResponseEntity<>(AjaxResult.error(ex.getMessage()), HttpStatus.OK);
  25. }
  26. @ExceptionHandler(CsmTokenException.class)
  27. public ResponseEntity<?> tokenException(CsmTokenException ex, WebRequest request) {
  28. logger.error("token exception occurred: ", ex);
  29. return new ResponseEntity<>(AjaxResult.error(ex.getMessage()), HttpStatus.UNAUTHORIZED);
  30. }
  31. @ExceptionHandler(MissingServletRequestParameterException.class)
  32. public ResponseEntity<?> MissingRequestParameterException(MissingServletRequestParameterException ex, WebRequest request) {
  33. logger.error("token exception occurred: ", ex);
  34. String message = ex.getParameterName() + "参数缺失";
  35. return new ResponseEntity<>(AjaxResult.error(message), HttpStatus.OK);
  36. }
  37. @ExceptionHandler(ResourceAccessException.class)
  38. public ResponseEntity<?> rpcException(ResourceAccessException ex, WebRequest request) {
  39. logger.error("远程调用异常: ", ex);
  40. return new ResponseEntity<>(AjaxResult.error("远程调用异常"), HttpStatus.INTERNAL_SERVER_ERROR);
  41. }
  42. @ExceptionHandler(MethodArgumentNotValidException.class)
  43. public ResponseEntity<?> paramCheckException(MethodArgumentNotValidException ex, WebRequest request) {
  44. Map<String, String> errors = new HashMap<>();
  45. ex.getBindingResult().getAllErrors().forEach((error) -> {
  46. String fieldName = ((FieldError) error).getField();
  47. String errorMessage = error.getDefaultMessage();
  48. errors.put(fieldName, errorMessage);
  49. });
  50. String res = String.join(",", errors.values());
  51. return new ResponseEntity<>(AjaxResult.error(res), HttpStatus.OK);
  52. }
  53. // 处理所有其他异常
  54. @ExceptionHandler(Exception.class)
  55. public ResponseEntity<?> globalExceptionHandler(Exception ex, WebRequest request) {
  56. logger.error("Unexpected exception occurred: ", ex);
  57. return new ResponseEntity<>(AjaxResult.error(ex.getClass().toString()), HttpStatus.INTERNAL_SERVER_ERROR);
  58. }
  59. }