GlobalExceptionHandler.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.dtb.portal.exception;
  2. import com.dtb.portal.controller.view.RestResponse;
  3. import com.dtb.portal.util.CodeDefault;
  4. import com.google.common.base.Strings;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.springframework.web.bind.ServletRequestBindingException;
  8. import org.springframework.web.bind.annotation.ControllerAdvice;
  9. import org.springframework.web.bind.annotation.ExceptionHandler;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import org.springframework.web.bind.annotation.RestControllerAdvice;
  12. import javax.servlet.http.HttpServletRequest;
  13. import java.util.Date;
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. /**
  17. * 全局异常处理
  18. */
  19. @RestControllerAdvice
  20. @ControllerAdvice
  21. @Slf4j
  22. public class GlobalExceptionHandler {
  23. /**
  24. * controller 参数转化时, 主要从这里捕获错误信息
  25. *
  26. * @param request 请求
  27. * @param e 错误信息
  28. * @return 请求结果
  29. */
  30. @ExceptionHandler(value = ServletRequestBindingException.class)
  31. @ResponseBody
  32. public RestResponse<?> exception(HttpServletRequest request, ServletRequestBindingException e) {
  33. RestResponse<?> exception = RestResponse.exception(CodeDefault.ILLEGAL_ARGUMENT);
  34. log.error("请求参数错误: {}", exception, e);
  35. return exception;
  36. }
  37. /**
  38. * NPE处理
  39. *
  40. * @param request 请求
  41. * @param npe 错误信息
  42. * @return 请求结果
  43. */
  44. @ExceptionHandler(value = NullPointerException.class)
  45. @ResponseBody
  46. public RestResponse<?> exception(HttpServletRequest request, NullPointerException npe) {
  47. /* RestResponse<?> exception = RestResponse.exception(CodeDefault.NULL_POINT_ERROR);
  48. if (!Strings.isNullOrEmpty(npe.getMessage())) {
  49. exception.setMessage(npe.getMessage());
  50. }
  51. Map<String, Object> extras = new HashMap<>(0);
  52. StackTraceElement stackTraceElement = npe.getStackTrace()[0];
  53. extras.put("class", stackTraceElement.getClassName());
  54. extras.put("method", stackTraceElement.getMethodName());
  55. extras.put("lineNumber", stackTraceElement.getLineNumber());
  56. exception.setExtraInfo(extras);
  57. log.error("NullPointerException: {}", exception, npe);*/
  58. String errMessage = npe.getMessage();
  59. if (StringUtils.isNotBlank(errMessage)) {
  60. errMessage = errMessage.split(":")[1].replaceAll(" ","");
  61. }
  62. return RestResponse.ok(errMessage);
  63. }
  64. /**
  65. * 这个兜底
  66. *
  67. * @param request 请求
  68. * @param e 错误信息
  69. * @return 请求结果
  70. */
  71. @ExceptionHandler(value = RuntimeException.class)
  72. @ResponseBody
  73. public RestResponse<?> exception(HttpServletRequest request, RuntimeException e) {
  74. String errMessage = e.getMessage();
  75. log.error("RuntimeException :",errMessage);
  76. /* if (StringUtils.isNotBlank(errMessage)) {
  77. errMessage = errMessage.split(":")[1].replaceAll(" ","");
  78. }*/
  79. if (errMessage.equals("会话超时,请重新登录")) {
  80. return RestResponse.timeOut(errMessage);
  81. }
  82. if (errMessage.equals("验证失败,请重新登录后使用")) {
  83. return RestResponse.timeOut(errMessage);
  84. }
  85. if (errMessage.equals("未登录")) {
  86. return RestResponse.noToken(errMessage);
  87. }
  88. return RestResponse.exception(errMessage);
  89. }
  90. @ExceptionHandler(value = Exception.class)
  91. @ResponseBody
  92. public RestResponse<?> exception(HttpServletRequest request, Exception e) {
  93. String errMessage = e.getMessage();
  94. /* if (StringUtils.isNotBlank(errMessage)) {
  95. errMessage = errMessage.split(":")[1].replaceAll(" ","");
  96. }*/
  97. log.error("==============>Exception :",e);
  98. return RestResponse.exception(errMessage);
  99. }
  100. }