SpringBoot配置GlobalExceptionHandler全局异常处理器案例

1. 创建全局异常处理器类GlobalExceptionHandler

@ControllerAdvice: 定义统一的异常处理类,捕获 Controller 层抛出的异常。如果添加 @ResponseBody 返回信息则为JSON格式,这样就不必在每个Controller中逐个定义AOP去拦截处理异常。
@RestControllerAdvice: 相当于 @ControllerAdvice 与 @ResponseBody 的结合体。
@ExceptionHandler: 统一处理一种类的异常,减少代码重复率,降低复杂度。

@ControllerAdvice
public class GlobalExceptionHandler {
    //@ExceptionHandler 该注解声明异常处理方法,  ModelAndView mv
    @ExceptionHandler(value = Exception.class)
    public ModelAndView myHandler(Exception e, HttpServletRequest request, HttpServletResponse response) {
        System.out.println("GlobalExceptionHandler全局异常处理器捕获");
        ModelAndView mv = new ModelAndView();

        mv.addObject("message", e.getMessage());         //异常错误信息提示
        mv.addObject("url", request.getRequestURI());    //异常请求的url地址
        mv.addObject("status", response.getStatus());    //获取状态码
        mv.setViewName("/pages/exception/error");    //异常的视图名称
        return mv;
    }
}

【注意】基于@ControllerAdvice注解的全局异常统一处理只能针对于Controller层的异常。也就是只能捕获到Controller层的异常,在service层或者其他层面的异常都不能捕获。

2. 创建controller测试出现异常情况

    //测试异常处理
    @GetMapping(path = "/exception")
    public String toException() {
        System.out.println("toException");
        //throw new Exception();
        int i =1/0;
        System.out.println("toException end");

        return "/pages/company/company_list";
    }

编写html页面显示错误信息

<!-- 统一异常处理页面 -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" >
<head>
	<title>出现错误啦</title>
</head>
<body>
<div class="content-container">
    <div class="head-line">
        <img src="../img/error.jpg" alt="" width="120"/>
    </div>
    <div class="subheader">
        <span name="message" th:text="${status}"/>,页面走丢啦<br/>
        <p style="font-size: 16px">
            原因:<font color="red" size="20px"><span name="message" th:text="${message}"/></font><br/>
            地址:<a th:href="${url}" rel="external nofollow" ><span name="url" th:text="${url}"/></a><br/>
        </p>

    </div>
    <div class="hr"></div>
    <div class="context">

        <p>您可以返回上一页重试,或直接向我们反馈错误报告
            <br/>
            联系地址:<a href="https://striveday.blog.csdn.net/" rel="external nofollow"  >String_day</a><br/>
            联系电话:<span>18828886888</span>
        </p>

    </div>
</body>
</html>

访问错误查看跳转页面

http://localhost:8000/OnlineMall/page/exception

到此这篇关于SpringBoot配置GlobalExceptionHandler全局异常处理器案例的文章就介绍到这了,更多相关SpringBoot配置GlobalExceptionHandler内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java常见异常及处理方式总结

    一.概述 异常指不期而至的各种状况,它在程序运行的过程中发生.作为开发者,我们都希望自己写的代码 永远都不会出现 bug,然而现实告诉我们并没有这样的情景.如果用户在程序的使用过程中因为一些原因造成他的数据丢失,这个用户就可能不会再使用该程序了.所以,对于程序的错误以及外部环境能够对用户造成的影响,我们应当及时报告并且以适当的方式来处理这个错误. 之所以要处理异常,也是为了增强程序的鲁棒性. 异常都是从 Throwable 类派生出来的,而 Throwable 类是直接从 Object 类继承而

  • SpringBoot异常: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext解决方案

    今天在使用SpringBoot创建了一个项目出现如下异常 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'documentationPluginsBootstrapper': Resolution of declared constructors on bean Class [springfox.documentation.spring.web.plugins.Docu

  • 浅谈JAVA在项目中如何自定义异常

    JAVA项目中自定义异常 1.数据返回处理类 @Data public class R<T> implements Serializable { private static final long serialVersionUID = -8497670085742879369L; @ApiModelProperty(value = "返回码", example = "200") private Integer code=200; @ApiModelPro

  • java实现统一异常处理的示例

    对于Dao层 和Service产生的异常要一直网上抛,直至Controller层,但是对于controller层不能处理的异常也不能直接抛给前端. 为什么不能在service处理异常? 答:Service 层往往涉及数据库事务,出现异常同样不适合捕获,否则事务无法自动回滚.此外 Service 层涉及业务逻辑,有些业务逻辑执行中遇到业务异常,可能需要在异常后转入分支业务流程.如果业务异常都被框架捕获了,业务功能就会不正常.[引用:极客时间的Java业务开发常见错误100例] 实现统一异常处理:

  • Java异常处理操作 Throwable、Exception、Error

    异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程. Java通过API中Throwable类的众多子类描述各种不同的异常.因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件.当条件生成时,错误将引发异常. Throwable 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. Throwable 有两个重要的子类:Excep

  • SpringBoot配置GlobalExceptionHandler全局异常处理器案例

    1. 创建全局异常处理器类GlobalExceptionHandler @ControllerAdvice: 定义统一的异常处理类,捕获 Controller 层抛出的异常.如果添加 @ResponseBody 返回信息则为JSON格式,这样就不必在每个Controller中逐个定义AOP去拦截处理异常. @RestControllerAdvice: 相当于 @ControllerAdvice 与 @ResponseBody 的结合体. @ExceptionHandler: 统一处理一种类的异常

  • SpringBoot配置系统全局异常映射处理

    目录 一.异常分类 1.业务异常 2.系统异常 二.解决应用启动后404界面 1.引入页面Jar包 2.自定义首页接口 3.首页界面 4.运行效果 三.SpringBoot2.0中异常处理 1.项目结构图 2.自定义业务异常类 3.自定义异常描述对象 4.统一异常处理格式 5.简单的测试接口 四.源代码地址 一.异常分类 这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常. 1.业务异常 业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性.

  • 如何基于Springboot完成新增员工功能并设置全局异常处理器

    目录 1. 新增员工 1.1 需求分析 1.2 数据模型 1.3 程序执行流程 1.4 代码实现 2 全局异常处理 2.1 新增员工存在的问题 2.2 全局异常处理思路 2.3 全局异常处理器 2.4 全局异常处理器代码实现 2.5 测试 总结 1. 新增员工 1.1 需求分析 后台系统中可以管理员工信息,通过新增员工来添加后台系统用户.点击[添加员工]按钮跳转到新增页面,如下 当填写完表单信息, 点击"保存"按钮后, 会提交该表单的数据到服务端, 在服务端中需要接受数据, 然后将数据

  • Java全局异常处理器实现过程解析

    前言 最近稍微闲了一点于是把这个半年都没更新的开源项目 cicada 重新捡了起来. 一些新关注的朋友应该还不知道这项目是干啥的?先来看看官方介绍吧(其实就我自己写的

  • Spring Validator接口校验与全局异常处理器

    Spring Validator接口校验 上一篇日志使用Bean Validation校验机制,对基本数据类型进行校验,方法是在实体类属性上使用注解标识校验方式,最后在Controller类中具体方法的形参里添加@Vlidated注解.Bean Validation校验有一个缺点是,我们的数据校验是在Java实体类里进行约束的,如果我们有多个处理器方法需要用到同一个实体类,那么定义在实体类属性上的校验规则就不好划分了,有的处理器只需要校验一个属性,而有的处理器需要校验多个属性,我们不可能为每一个

  • springboot如何添加全局异常捕获类

    这篇文章主要介绍了springboot如何添加全局异常捕获类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前几天工作中遇到一个项目,前后端分离的,作为后端开发专注开发接口.对于程序中出现的异常如果不进行处理,将报错信息直接返回到前端十=时不优雅的,因此需要对异常进行捕获和处理,但是每个接口都单独处理异常则显得代码十分臃肿,因此写了个异常捕获类对全局出现的异常进行统一处理. 1.如果程序中出现异常如下: @RestController publ

  • 基于SpringMVC的全局异常处理器介绍

    近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestMapping.@Autowared.@Component,今天呢,我所要写的是SpringMVC的全局异常处理器,关联的接口有HandlerExceptionResolver(Eclipse用户可以按Ctrl+Shift+T进行搜索该接口),什么是全局异常处理器?为什么要用它呢? 在企业开发中,各种

  • SpringBoot如何优雅的处理全局异常

    前言 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要求 JDK:1.8 SpringBoot:1.5.17.RELEASE 首先还是Maven的相关依赖: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.

  • SpringBoot搭建全局异常拦截

    1.异常拦截类的创建 package com.liqi.web.core.exception; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; import

  • SpringBoot配置自定义拦截器实现过程详解

    目录 1. HttpServletRequest包装类 2. 使用Filter将request传递下去 3. 添加拦截器 4. 全局异常处理器 5. 配置拦截器 1. HttpServletRequest包装类 因为HttpServletRequest只能读取一次,所以需要对request进行包装,变成可重复读的request. package net.lesscoding.interceptor; import javax.servlet.ReadListener; import javax.

随机推荐