CustomErrorController.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.zhentao.exception;
  2. import com.zhentao.common.Result;
  3. import org.springframework.boot.web.servlet.error.ErrorController;
  4. import org.springframework.http.HttpStatus;
  5. import org.springframework.http.ResponseEntity;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import javax.servlet.http.HttpServletRequest;
  9. /**
  10. * 自定义错误控制器
  11. * 处理Spring Boot默认的/error路径
  12. */
  13. @RestController
  14. public class CustomErrorController implements ErrorController {
  15. @RequestMapping("/error")
  16. public ResponseEntity<Result<String>> handleError(HttpServletRequest request) {
  17. Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
  18. String errorMessage = (String) request.getAttribute("javax.servlet.error.message");
  19. Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
  20. if (statusCode == null) {
  21. statusCode = 500;
  22. }
  23. if (errorMessage == null || errorMessage.isEmpty()) {
  24. if (statusCode == 404) {
  25. errorMessage = "请求的资源不存在";
  26. } else if (statusCode == 403) {
  27. errorMessage = "拒绝访问";
  28. } else if (statusCode == 401) {
  29. errorMessage = "未授权,请先登录";
  30. } else if (statusCode == 500) {
  31. errorMessage = "服务器内部错误";
  32. } else {
  33. errorMessage = "未知错误";
  34. }
  35. }
  36. if (exception != null && exception.getMessage() != null) {
  37. errorMessage = exception.getMessage();
  38. }
  39. Result<String> result = Result.error(statusCode, errorMessage);
  40. HttpStatus httpStatus = HttpStatus.valueOf(statusCode);
  41. return new ResponseEntity<>(result, httpStatus);
  42. }
  43. }