摘要

SpringBoot全局异常处理对象,这里只是一个简单的用ControllerAdvice完成的实现方式,实现的是对所有在服务器捕捉到的异常进行全局的处理,返回的是ModelAndView对象

说明

使用ControllerAdvice,ExceptionHandler等注解去使用

代码

在SpringBoot中的代码

  1. package com.bothsavage.forum_study.advice;
  2. import com.alibaba.fastjson.JSON;
  3. import com.bothsavage.forum_study.dto.ResultDTO;
  4. import com.bothsavage.forum_study.exception.CustomizeErrorCode;
  5. import com.bothsavage.forum_study.exception.CustomizeException;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.ui.Model;
  8. import org.springframework.web.bind.annotation.ControllerAdvice;
  9. import org.springframework.web.bind.annotation.ExceptionHandler;
  10. import org.springframework.web.servlet.ModelAndView;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.io.IOException;
  14. import java.io.PrintWriter;
  15. /**
  16. * 全局异常处理对象
  17. */
  18. @ControllerAdvice
  19. @Slf4j
  20. public class CustomizeExceptionHandler {
  21. @ExceptionHandler(Exception.class)
  22. ModelAndView handle(Throwable e, Model model, HttpServletRequest request, HttpServletResponse response) {
  23. String contentType = request.getContentType();
  24. if ("application/json".equals(contentType)) {
  25. ResultDTO resultDTO;
  26. // 返回 JSON
  27. if (e instanceof CustomizeException) {
  28. resultDTO = ResultDTO.errorOf((CustomizeException) e);
  29. } else {
  30. log.error("handle error", e);
  31. resultDTO = ResultDTO.errorOf(CustomizeErrorCode.SYS_ERROR);
  32. }
  33. try {
  34. response.setContentType("application/json");
  35. response.setStatus(200);
  36. response.setCharacterEncoding("utf-8");
  37. PrintWriter writer = response.getWriter();
  38. writer.write(JSON.toJSONString(resultDTO));
  39. writer.close();
  40. } catch (IOException ioe) {
  41. }
  42. return null;
  43. } else {
  44. // 错误页面跳转
  45. if (e instanceof CustomizeException) {
  46. model.addAttribute("message", e.getMessage());
  47. } else {
  48. log.error("handle error", e);
  49. model.addAttribute("message", CustomizeErrorCode.SYS_ERROR.getMessage());
  50. }
  51. return new ModelAndView("error");
  52. }
  53. }
  54. }

注意

这里就是一个简单的demo,目的是为了知道有这个东西,能马上复制代码拿过来用