zoukankan      html  css  js  c++  java
  • SpringBoot2.0 基础案例(03):配置系统全局异常映射处理

    本文源码:GitHub·点这里 || GitEE·点这里

    一、异常分类

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

    1、业务异常

    业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性。
    常见的业务异常提示:
    1)请输入xxx
    2)xxx不能为空
    3)xxx重复,请更换

    2、系统异常

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

    二、解决应用启动后404界面

    1、引入页面Jar包

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    2、自定义首页接口

    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    public class IndexController {
        @RequestMapping("/")
        public String index(ModelMap modelMap) {
            modelMap.addAttribute("name","知了一笑") ;
            return "index";
        }
    }
    

    3、首页界面

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8" />
        <title></title>
    </head>
    <body>
    <h1 th:text="${name}"></h1>
    </body>
    </html>
    

    4、运行效果

    三、SpringBoot2.0中异常处理

    1、项目结构图

    2、自定义业务异常类

    public class ServiceException extends Exception {
        public ServiceException (String msg){
            super(msg);
        }
    }
    

    3、自定义异常描述对象

    public class ReturnException {
        // 响应码
        private Integer code;
        // 异常描述
        private String msg;
        // 请求的Url
        private String url;
    	// 省略 get set 方法
    }
    

    4、统一异常处理格式

    1)两个基础注解
    @ControllerAdvice 定义统一的异常处理类
    @ExceptionHandler 定义异常类型对应的处理方式
    2)代码实现

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

    5、简单的测试接口

    @Controller
    public class ExeController {
        /**
         *  {
         *    "code": 600,
         *    "msg": "业务异常:ID 不能为空",
         *    "url": "http://localhost:8003/exception01"
         *  }
         */
        @RequestMapping("/exception01")
        public String exception01 () throws ServiceException {
            throw new ServiceException("业务异常:ID 不能为空");
        }
    
        @RequestMapping("/exception02")
        public String exception02 () throws Exception {
            throw new Exception("出现异常,全体卧倒");
        }
    }
    

    四、源代码地址

    GitHub·地址
    https://github.com/cicadasmile/spring-boot-base
    GitEE·地址
    https://gitee.com/cicadasmile/spring-boot-base
    

  • 相关阅读:
    如何在windows系统下安装swoole(Docker环境)
    如何在windows系统下安装swoole(cgywin环境)
    Docker的介绍及安装
    Java50道经典习题-程序48 数字加密
    Java50道经典习题-程序49 子串出现的个数
    Java50道经典习题-程序50 文件IO
    从键盘录入一个数据,输出对应的九九乘法表
    冒泡排序
    直接排序
    Math类的三个方法比较: floor() ceil() round()
  • 原文地址:https://www.cnblogs.com/cicada-smile/p/10994293.html
Copyright © 2011-2022 走看看