GlobalExceptionHandler.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.ydtech.aop;
  2. import cn.dev33.satoken.exception.NotLoginException;
  3. import cn.dev33.satoken.exception.NotPermissionException;
  4. import com.ydtech.aop.exception.DescribeException;
  5. import com.ydtech.core.page.HttpResult;
  6. import com.ydtech.core.page.HttpStatus;
  7. import com.ydtech.exception.SystemException;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.dao.DuplicateKeyException;
  11. import org.springframework.validation.BindingResult;
  12. import org.springframework.validation.ObjectError;
  13. import org.springframework.web.bind.MethodArgumentNotValidException;
  14. import org.springframework.web.bind.annotation.ControllerAdvice;
  15. import org.springframework.web.bind.annotation.ExceptionHandler;
  16. import org.springframework.web.bind.annotation.ResponseBody;
  17. import javax.validation.ConstraintViolationException;
  18. import java.sql.SQLIntegrityConstraintViolationException;
  19. import java.util.List;
  20. @ControllerAdvice
  21. public class GlobalExceptionHandler {
  22. private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  23. /**
  24. * 判断错误是否是已定义的已知错误,不是则由未知错误代替,同时记录在log中
  25. *
  26. * @param e 异常
  27. * @return
  28. */
  29. @ExceptionHandler(value = Exception.class)
  30. @ResponseBody
  31. public HttpResult exceptionGet(Exception e) {
  32. LOGGER.error("【系统异常】{}", e);
  33. // if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
  34. // StackTraceElement element = e.getStackTrace()[0];
  35. // ErrorInfo errorInfo = new ErrorInfo(
  36. // element.getClassName(),
  37. // element.getFileName(),
  38. // element.getMethodName(),
  39. // String.valueOf(element.getLineNumber())
  40. // );
  41. //
  42. // return HttpResult.error(-9999, errorInfo.toString());
  43. // }
  44. return HttpResult.error(-9999, "程序异常,请联系管理员");
  45. }
  46. @ExceptionHandler(value = DescribeException.class)
  47. @ResponseBody
  48. public HttpResult describeExceptionHandle(DescribeException describeException) {
  49. return HttpResult.error(describeException.getCode(), describeException.getMessage());
  50. }
  51. @ExceptionHandler(value = SystemException.class)
  52. @ResponseBody
  53. public HttpResult systemExceptionHandle(SystemException systemException) {
  54. return HttpResult.error(Integer.parseInt(systemException.getCode()), systemException.getMessage());
  55. }
  56. @ExceptionHandler(value = MethodArgumentNotValidException.class)
  57. @ResponseBody
  58. public HttpResult methodArgumentNotValidExceptionHandle(MethodArgumentNotValidException methodArgumentNotValidException) {
  59. BindingResult bindingResult = methodArgumentNotValidException.getBindingResult();
  60. List<ObjectError> objectErrors = bindingResult.getAllErrors();
  61. String message = objectErrors.get(0).getDefaultMessage();
  62. return HttpResult.error(400, message);
  63. }
  64. @ExceptionHandler(value = DuplicateKeyException.class)
  65. @ResponseBody
  66. public HttpResult sqlExceptionHandle(SQLIntegrityConstraintViolationException sqlException) {
  67. return HttpResult.error("违反唯一约束:" + sqlException.getMessage()
  68. .substring(0, sqlException.getMessage().indexOf("for key")));
  69. }
  70. @ExceptionHandler(value = ConstraintViolationException.class)
  71. @ResponseBody
  72. public HttpResult constraintViolation(ConstraintViolationException constraintViolationException) {
  73. return HttpResult.error(constraintViolationException.getMessage());
  74. }
  75. @ExceptionHandler(value = NotLoginException.class)
  76. @ResponseBody
  77. public HttpResult notLoginException(NotLoginException e) {
  78. return HttpResult.error(HttpStatus.SC_UNAUTHORIZED, "未登录状态,无法访问。");
  79. }
  80. @ExceptionHandler(value = NotPermissionException.class)
  81. @ResponseBody
  82. public HttpResult notPermissionException(NotPermissionException e) {
  83. return HttpResult.error(HttpStatus.SC_FORBIDDEN, "未获得权限,无法访问。");
  84. }
  85. }