ApplicationExceptionHandler.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.ifast.common.exception.handler;
  2. import com.ifast.api.exception.IFastApiException;
  3. import com.ifast.common.exception.IFastException;
  4. import com.ifast.common.type.EnumErrorCode;
  5. import com.ifast.common.utils.HttpContextUtils;
  6. import com.ifast.common.utils.Result;
  7. import org.apache.shiro.ShiroException;
  8. import org.apache.shiro.authc.ExpiredCredentialsException;
  9. import org.apache.shiro.authc.IncorrectCredentialsException;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. import org.springframework.dao.DuplicateKeyException;
  13. import org.springframework.web.bind.annotation.ExceptionHandler;
  14. import org.springframework.web.bind.annotation.RestControllerAdvice;
  15. import org.springframework.web.servlet.ModelAndView;
  16. import org.springframework.web.servlet.NoHandlerFoundException;
  17. /**
  18. * 异常处理器
  19. *
  20. */
  21. @RestControllerAdvice()
  22. public class ApplicationExceptionHandler {
  23. private Logger log = LoggerFactory.getLogger(getClass());
  24. public final static String ERROR_DEFAULT_PAGE = "error/error";
  25. /**
  26. * 参数校验异常
  27. */
  28. @ExceptionHandler(IllegalArgumentException.class)
  29. public Result<String> illegalArgumentException(IllegalArgumentException e) {
  30. return Result.build(EnumErrorCode.illegalArgument.getCode(), e.getMessage());
  31. }
  32. /**
  33. * API异常
  34. */
  35. @ExceptionHandler(IFastApiException.class)
  36. public Result<String> handleIFastAPIException(IFastApiException e) {
  37. return getStringResult(e.getMessage());
  38. }
  39. /**
  40. * 自定义异常
  41. */
  42. @ExceptionHandler(IFastException.class)
  43. public Object handleIFastException(IFastException e) {
  44. if(!HttpContextUtils.isAjax()){
  45. ModelAndView mv = new ModelAndView();
  46. mv.setViewName(ERROR_DEFAULT_PAGE);
  47. return mv;
  48. }else{
  49. return getStringResult(e.getMessage());
  50. }
  51. }
  52. private Result<String> getStringResult(String message) {
  53. try {
  54. int code = Integer.parseInt(message);
  55. return Result.build(code, EnumErrorCode.getMsgByCode(code));
  56. } catch (NumberFormatException e1) {
  57. log.warn("错误码使用错误,异常内容请抛出EnumErrorCode类的枚举值");
  58. e1.printStackTrace();
  59. return Result.build(EnumErrorCode.unknowFail.getCode(), EnumErrorCode.unknowFail.getMsg());
  60. }
  61. }
  62. @ExceptionHandler(DuplicateKeyException.class)
  63. public Result<String> handleDuplicateKeyException(DuplicateKeyException e) {
  64. log.error(e.getMessage());
  65. return Result.build(EnumErrorCode.duplicateKeyExist.getCode(), EnumErrorCode.duplicateKeyExist.getMsg());
  66. }
  67. @ExceptionHandler(NoHandlerFoundException.class)
  68. public Result<String> noHandlerFoundException(NoHandlerFoundException e) {
  69. log.error(e.getMessage());
  70. return Result.build(EnumErrorCode.pageNotFound.getCode(), EnumErrorCode.pageNotFound.getMsg());
  71. }
  72. @ExceptionHandler(ShiroException.class)
  73. public Result<String> handleAuthorizationException(ShiroException e) {
  74. log.error(e.getMessage());
  75. if(e instanceof IncorrectCredentialsException) {
  76. return Result.build(EnumErrorCode.apiAuthorizationFailed.getCode(), EnumErrorCode.apiAuthorizationFailed.getMsg());
  77. }else if(e instanceof ExpiredCredentialsException) {
  78. return Result.build(EnumErrorCode.apiAuthorizationExpired.getCode(), EnumErrorCode.apiAuthorizationExpired.getMsg());
  79. }
  80. return Result.build(EnumErrorCode.notAuthorization.getCode(), EnumErrorCode.notAuthorization.getMsg());
  81. }
  82. @ExceptionHandler(Exception.class)
  83. public Object handleException(Exception e) {
  84. if(!HttpContextUtils.isAjax()){
  85. ModelAndView mv = new ModelAndView();
  86. mv.setViewName(ERROR_DEFAULT_PAGE);
  87. return mv;
  88. }else{
  89. log.error(e.getMessage());
  90. return Result.build(EnumErrorCode.unknowFail.getCode(), EnumErrorCode.unknowFail.getMsg());
  91. }
  92. }
  93. }