异常传递

如图:服务层和dao层的异常最终都会到达控制层,控制层的异常则会自动记入logback日志系统。所以我们应该在控制层来捕获系统异常

捕获控制层异常

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Controller
public class SampleController {
//用来手动记录日志
private static final Logger log = LoggerFactory.getLogger(SampleController.class);
//触发除0异常
@GetMapping("/test1")
public void test1() {
int i=1/0;
}
//触发空指针异常
@GetMapping("/test2")
public void test2() {
String a=null;
a.length();
}
//捕获除0异常
@ExceptionHandler(ArithmeticException.class)
public void exception1(ArithmeticException e){
System.out.println("处理除0异常");
//继续抛出异常,才能被logback的error级别日志捕获
throw e;
}
//捕获空指针异常
@ExceptionHandler(NullPointerException.class)
public String exception2(NullPointerException e){
System.out.println("处理空指针异常");
//手动将异常写入logback的error级别日志
log.error("空指针异常",e);
return "/null.html";
}
}

这个控制类有两个映射,分别抛出两个不同的异常,@ExceptionHandler的方法会分别捕获其参数对应的异常。

现在访问http://localhost/test1,程序最后抛出异常,会跳转到一个系统默认的error页面,这个页面对用户是很不友好的。不过如果你配置了http响应码的跳转页面(以后会讲),或者搭建了nginx之类的代理服务器,可以根据这里的500响应码跳转到一个自定义的友好页面

访问http://localhost/test2,如果没有配置动态页面,最终会跳转到静态的null.html,这样可以给我们用户一个友好的提示页面。注意不能用error.html,这个页面已经被系统占用

捕获所有控制层异常

上面这个类只能捕获当前@Controller的异常,如果要捕获系统中所有@Controller的异常,只需要把类注解@Controller换成@ControllerAdvice。这就变成了一个专门处理异常的类,不过@GetMapping映射就不能再放在这里了

@ControllerAdvice
public class SampleController {

spring boot(15)-异常处理的更多相关文章

  1. Spring Boot全局异常处理

    本文为大家分享了Spring Boot全局异常处理,供大家参考,具体内容如下 1.后台处理异常 a.引入thymeleaf依赖 <!-- thymeleaf模板插件 --> <dep ...

  2. spring boot 统一异常处理

    需求源自于任何一个业务的编写总会有各种各样的条件判断,需要时时手动抛出异常,又希望让接口返回友好的错误信息. spring boot提供的帮助是自动将异常重定向到路由为/error的控制器 但是我们又 ...

  3. Spring Boot统一异常处理实践

    摘要: SpringBoot异常处理. 原文:Spring MVC/Boot 统一异常处理最佳实践 作者:赵俊 前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是一件棘手的事情, 对于很多 ...

  4. Spring Boot 全局异常处理

    Spring Boot版本 1.5 @ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExcept ...

  5. spring boot的异常处理

    原文:https://blog.csdn.net/tianyaleixiaowu/article/details/70145251 全局异常处理是个比较重要的功能,一般在项目里都会用到. 我大概把一次 ...

  6. Spring Boot (15) pom.xml设置

    继承spring-boot-parent 要成为一个spring boot项目,首先就必须在pom.xml中继承spring-boot-starter-parent,同时制定其版本 <paren ...

  7. Spring Boot统一异常处理方案示例

    一.异常处理的原则 1.调用方法的时候返回布尔值来代替返回null,这样可以 NullPointerException.由于空指针是java异常里最恶心的异常. 2. catch块里别不写代码.空ca ...

  8. spring boot 全局异常处理及自定义异常类

    全局异常处理: 在处理controller层抛出的自定义异常时,可以实现@ControllerAdvice注解捕获,配合@ExceptionHandler来增强所有的@requestMapping方法 ...

  9. Spring Boot☞ 统一异常处理

    效果区:  代码区: package com.wls.integrateplugs.exception.dto; public class ErrorInfo<T> { public st ...

随机推荐

  1. Php开发银行接口之浦发银行

    Php开发银行接口之浦发银行 (提示:下面的经验都是按照开发文档一步一步踩坑过来的,但是不能不看开发文档!!!) 第一步:开发准备 1,安装java,百度下载JDK很方便(我自己网盘有,然后配置环境变 ...

  2. Oracle 数据库实例

    Oracle- 数据库的实例,表空间,用户,表之间的关系 一.完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例 1.数据库是一些列物理文件的集合(数据文件,控制文件,联机文件, ...

  3. Architecture of a Java Compiler

    Architectural Overview   A modern optimizing compiler can be logically divided into four parts:   Th ...

  4. CharacterRangeTable

    转载:https://github.com/jacoco/jacoco/wiki/CharacterRangeTable This page discusses a not yet available ...

  5. Linux 文件内容查看工具介绍-cat,less,more,tail,head

    Linux 文件内容查看工具介绍 作者:北南南北来自:LinuxSir.Org摘要: 本文讲述几种常用文件内容的查看工具,比如cat.more.less.head.tail等,把这些工具最常用的参数. ...

  6. DateUtils 通用类

    package com.egaoqi.util; import org.apache.commons.lang3.time.DateFormatUtils; import java.text.Pars ...

  7. visual studio 不能进入调试状态

    解决Windows操作系统在处理回环地址 1. 第一种解决方案是禁用环回检查. 步骤如下 a) 依次单击“开始”和“运行”,键入 regedit,然后单击“确定” b) 在注册表编辑器中,找到并单击下 ...

  8. ASP.NET jQuery 事件里调用后台方法

    利用js 调用后台写的方法 <script src="js/jquery-1.7.1.min.js"></script> <script> $( ...

  9. [javaSE] 网络编程(概述)

    网络通信的步骤, 1.找到对方的ip 2.数据发送到对方指定的应用程序上,为了标识这些应用程序,用数字进行标识,这个数字就是端口 3.定义通信规则,这个规则就称为协议 国际组织定义了通用协议 TCP/ ...

  10. iOS 关于Xcode上的Other linker flags

    Targets选项下有Other linker flags的设置,用来填写XCode的链接器参数,如:-ObjC -all_load -force_load等.还记得我们在学习C程序的时候,从C代码到 ...