SpringBoot学习笔记(5)----SpringBoot中异常处理的三种方法
对于异常的处理,Spring Boot中提供默认的一个异
常处理界面,如下图:
但是在实际的运用开发中,这样的页面显然是不友好的,Spring Boot也提供了自定义异常处理的方式,如下总结三种一场处理方式
1. 实现ErrorController接口的方式
实现ErrorController接口,重写getErrorPath()方法,路径指向自定义的error页面。代码如下:
package com.wangx.boot.controller; import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class BaseException implements ErrorController { @Override
public String getErrorPath() {
return "error/error";
} @RequestMapping
public String error() {
return getErrorPath();
}
}
页面目录结构:

这样当出现异常时就会映射error目录下的error.ftl视图。这是所有错误都会映射该试图。
2. 静态页面和模板引擎的异常处理
静态页面直接在resources目录下添加public/error/404.html,此时如果出现路径找不到异常,就会直接映射到该页面。
运行结果为:
模板引擎则需要在templates目录下的添加error/5xx.ftl视图,如1中的5xx.ftl,Spring Boot也会自动根据状态码映射该试图,如这里的5xx.ftl可以改为500.ftl,这样报500时也会映射该试图,运行结果如下:

3. 使用@ControllerAdvice、@ExceptionHandler、@ResponseStatus(HttpStatus.OK)处理异常
这种方式可以@ExceptionHandler({RuntimeException.class})处理不同的异常
代码如下:
package com.wangx.boot.controller; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView; @ControllerAdvice
public class BizExceptionHander { @ExceptionHandler({RuntimeException.class})
@ResponseStatus(HttpStatus.OK)
public ModelAndView processException(RuntimeException r) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exceptions", r.getMessage());
modelAndView.setViewName("error/500");
return modelAndView;
}
@ExceptionHandler({Exception.class})
@ResponseStatus(HttpStatus.OK)
public String xception(Exception r) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exceptions", r.getMessage());
return "error/500";
}
}
在出现RuntimeException时执行第一个方法,Exception时执行第二个方法,拦截处理什么样的异常由ExceptionHandler注解中的异常类的字节码文件决定,设置异常路径为error/500,在error/500下新建500.ftl视图
500.ftl
<body>这是第三种种异常处理方法.异常信息:${exceptions}
</body>
在IndexController.java中使方法抛出运行时一场(2中的异常也是此方式测试的,抛出500状态码)
IndexController.java
package com.wangx.boot.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import java.util.Map; @Controller
@RequestMapping("/index")
public class IndexController { @RequestMapping("/index")
public String hello(Map<String,Object> map){
//传递数据到freemaker模板中
map.put("name", "[Angel -- 守护天使]");
return "index"; }
@RequestMapping("/error")
public String erroe(Map<String,Object> map){
throw new RuntimeException("出现运行时异常"); }
}
运行结果:

这里只是简单的异常处理使用方式测试示例,可以根据自己的需求,选择不同的异常处理方式。
SpringBoot学习笔记(5)----SpringBoot中异常处理的三种方法的更多相关文章
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring实例化Bean的三种方法
在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象.在 Spring 中,实例化 Bean 有三种方式,分别是构造器实例化.静态工厂方式实例化和实例工厂方式实例化. 构造器实例化 ...
- 转载:WinForm中播放声音的三种方法
转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...
- MATLAB中多行注释的三种方法
MATLAB中多行注释的三种方法 A. %{ 若干语句 %} B. 多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释 ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...
- SpringBoot学习笔记(6)----SpringBoot中使用Servlet,Filter,Listener的三种方式
在一般的运用开发中Controller已经大部分都能够实现了,但是也不排除需要自己实现Servlet,Filter,Listener的方式,SpringBoot提供了三种实现方式. 1. 使用Bean ...
- jsp值传到后台Struts2中的action三种方法
Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: <form action="login" method="post" n ...
- SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存
1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
- SpringBoot学习笔记(6) SpringBoot数据缓存Cache [Guava和Redis实现]
https://blog.csdn.net/a67474506/article/details/52608855 Spring定义了org.springframework.cache.CacheMan ...
随机推荐
- Windows2003 安装MVC4 环境的步骤
一.作为部署服务器的安装步骤 1.服务器上安装SP2 和 IIS6 2.安装.Net Framework3.5 SP1(完整安装包,包含2.0 2.0SP1,237MB那个安装包) 3.安装.Net ...
- 编程范式(Programming Paradigm)-[ 程序员的编程世界观 ]
编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式.随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐 ...
- Unity设置Turorials-Wide布局
在bilibili上看关于UGUI官翻视频时,很喜欢对方的布局,自己照着改了下,改的步骤如下: 1, 先选用 2by3 布局 2, 把Project面板拖到Hierarchy下边 3, 把2列布局改成 ...
- PhotoZoom正式版和试用版的区别是什么?
通常的工具对数码图片进行放大时,总会降低图片的品质,而这款软体使用了S-SPLINE技术(一种申请过专利的,拥有自动调节.进阶的插值算法的技术),可以将尽可能地提高放大图片的品质.程序最大的特色是可以 ...
- [实验楼]python11期--NO.1(未完成)
tuple 是 Python 的一种不可变数据类型,用于列表数据一旦初始化就不会再修改的场景.tuple 只能通过位置索引去访问里面的元素,但有时候我们需要给每个元素取个别名,以便通过别名去获取对应的 ...
- (4)pyspark---dataframe清理
1.交叉表(crosstab): pandas中也有,常和pivot_table比较. 查看家庭ID与评分的交叉表: 2.处理缺失值:fillna withColumn:新增一列数据 cast : 用 ...
- Vue PC端框架
Vue PC端框架 1. Element 中文文档:http://element-cn.eleme.io/#/zh-CN github地址:https://github.com/ElemeFE/ele ...
- Mybatis 中 foreach collection 的三种用法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...
- linux内核(四)内存管理单元MMU
1,基本概念 一个程序运行时没必要全部都同时装入内存,只需要把当前需要运行的部分装入内存即可,这样就使得一个大程序可以在较小的内存中运行,也使得内存中可以同时装入更多的程序并发执行,从用户角度看,该系 ...
- spring boot约定优于配置的这种做法在如今越来越流行了
约定优于配置的这种做法在如今越来越流行了,它的特点是简单.快速.便捷.但是这是建立在程序员熟悉这些约定的前提上.而 Spring 拥有一个庞大的生态体系,刚开始转到 Spring Boot 完全舍弃 ...