springboot系列教程(三):全局异常映射(含源码)
创始人
2024-11-04 04:37:47

一、异常分类

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

1、业务异常

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

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

2、系统异常

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

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

二、应用启动后404界面

在这里插入图片描述

1、引入页面Jar包

     org.springframework.boot     spring-boot-starter-thymeleaf  

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","jksadf") ;         return "index";     } } 

3、首页界面

               

三、异常处理

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、统一异常处理格式

两个基础注解

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

代码实现

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("出现异常,全体卧倒");     } } 

在这里插入图片描述

相关内容

热门资讯

格力电器获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示格力电器(000651)新获得一项实用新型专利授权,专利名为“...
第二届食材供应链产业峰会:观麦... 2018年3月,深圳圣淘沙酒店内,一场关于食材供应链转型的深度思考正在进行。“现代供应链”写入十九大...
耳夹式耳机会漏音吗?有哪些牌子... 眼看着双十一要到了,不少朋友想趁着活动买副耳夹式耳机,结果一搜就懵了,价格从几十块到上千元差了一大截...
数字消费,绘就美好生活新图景 清晨,智能音箱用悠扬的音乐将你唤醒并告知今天的天气状况;上午,通过在线会议软件与远在千里之外的同事协...
原创 第... 流量第一省以千万元奖补吸引诸多互联网创作者入粤,是因为这里是中国产业经济的高地之一,在这里,有未来,...