0


springboot系列教程(三):全局异常映射(含源码)

一、异常分类

这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。

1、业务异常

业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性。常见的业务异常提示:

  • 请输入xxx
  • xxx不能为空
  • xxx重复,请更换

2、系统异常

系统异常主要是一些不可预见性异常,处理系统异常,可以让展示出一个友好的用户界面,不易给用户造成反感。如果是一个金融类系统,在用户界面出现一个系统异常的崩溃界面,很有可能直接导致用户流失。
常见的系统异常提示:

  • 页面丢失404
  • 服务器异常500

二、应用启动后404界面

在这里插入图片描述

1、引入页面Jar包

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-thymeleaf</artifactid>
</dependency>

2、自定义首页接口

importorg.springframework.stereotype.Controller;importorg.springframework.ui.ModelMap;importorg.springframework.web.bind.annotation.RequestMapping;@ControllerpublicclassIndexController{@RequestMapping("/")publicStringindex(ModelMap modelMap){
        modelMap.addAttribute("name","jksadf");return"index";}}

3、首页界面

<!DOCTYPEhtml><html><headlang="en"><metacharset="UTF-8"/><title></title></head><body><h1th:text="${name}"></h1></body></html>

三、异常处理

1、项目结构图

在这里插入图片描述

2、自定义业务异常类

publicclassServiceExceptionextendsException{publicServiceException(String msg){super(msg);}}

3、自定义异常描述对象

publicclassReturnException{// 响应码privateInteger code;// 异常描述privateString msg;// 请求的UrlprivateString url;// 省略 get set 方法}

4、统一异常处理格式

两个基础注解

  • @ControllerAdvice 定义统一的异常处理类
  • @ExceptionHandler 定义异常类型对应的处理方式

代码实现

importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.servlet.ModelAndView;importjavax.servlet.http.HttpServletRequest;@ControllerAdvice// 异常以Json格式返回 等同 ExceptionHandler + ResponseBody 注解// @RestControllerAdvicepublicclassHandlerException{/**
     * 自定义业务异常映射,返回JSON格式提示
     */@ExceptionHandler(value =ServiceException.class)@ResponseBodypublicReturnException handler01 (HttpServletRequest request,ServiceException e){ReturnException returnException =newReturnException();
        returnException.setCode(600);
        returnException.setMsg(e.getMessage());
        returnException.setUrl(String.valueOf(request.getRequestURL()));return returnException ;}/**
     * 服务异常
     */@ExceptionHandler(value =Exception.class)publicModelAndView handler02 (HttpServletRequest request,Exception e){ModelAndView modelAndView =newModelAndView();
        modelAndView.addObject("ExeMsg", e.getMessage());
        modelAndView.addObject("ReqUrl", request.getRequestURL());
        modelAndView.setViewName("/exemsg");return modelAndView ;}}

5、简单的测试接口

@ControllerpublicclassExeController{/**
     *  {
     *    "code": 600,
     *    "msg": "业务异常:ID 不能为空",
     *    "url": "http://localhost:8003/exception01"
     *  }
     */@RequestMapping("/exception01")publicString exception01 ()throwsServiceException{thrownewServiceException("业务异常:ID 不能为空");}@RequestMapping("/exception02")publicString exception02 ()throwsException{thrownewException("出现异常,全体卧倒");}}

在这里插入图片描述

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/weixin_43860634/article/details/140411470
版权归原作者 飞翔的佩奇 所有, 如有侵权,请联系我们删除。

“springboot系列教程(三):全局异常映射(含源码)”的评论:

还没有评论