Spring Boot2.0之全局捕获异常
全局捕获异常,很明显的错误404返回给客户,很不好呀。整个web请求项目全局捕获异常,比如空指针直接返回给客户啊,那多操蛋呀~
看这几个常用的注解:
@ExceptionHandler 表示拦截异常
- @ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类
- @ControllerAdvice 可以指定扫描范围
- @ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用 @ResponseBody 进行 json 转换
- 返回 String,表示跳到某个 view
- 返回 modelAndView
- 返回 model + @ResponseBody
创建meven工程。pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ErrorCatch</groupId>
<artifactId>com.toov5.ErrorCatch</artifactId>
<version>0.0.1-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> </project>
Java类
package com.toov5.ErrorCatch; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
//以后经常做为服务异常捕获,要经常用到这个注解
public class ErrorCatch {
@RequestMapping("/getUser")
public String getUser(int i ){
int j = 1/i;
return "返回"+j; } }
项目目录结构:

启动,访问:


图2丑陋的页面出来了,用户体验很瞎眼(这算是个用户体验哈)~~
解决方案1: try catch
public class ErrorCatch {
@RequestMapping("/getUser")
public String getUser(int i ){
int j = 0;
try {
j = 1/i;
} catch (Exception e) {
return "不好意思啊客户!~";
}
return "返回"+j;
}
}

如果每个错误,都要这样。。。。。那不蛋疼了啊~开发可要累死了
解决方案二 全局捕获异常
使用aop技术,采用异常通知
Spring Boot提供了支持,
首先建立一个类型,专门用来处理异常的
废话不多说,实战!
首先创建一个包 error(用来放异常捕获类的)
然后创建异常捕获类:
1、返回json格式
2、返回页面
首先创建类:
package com.toov5.error; import java.util.HashMap;
import java.util.Map; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice(basePackages="com.toov5.ErrorCatch") //SpringBoot的异常切入点。此包下的包揽了哈
public class GlobalException { @ResponseBody //返回jsoon给客户端
public Map<String, Object> exceptionHandler(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("errorCode", "666");
map.put("errorMsg", "不好意思啊");
return map; } }
@ExceptionHandler(RuntimeException.class) 这个注解表示运行时异常
注意 原java类文件去掉try catch
package com.toov5.ErrorCatch; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController //以后经常做微服务异常捕获,要经常用到这个注解
public class ErrorCatch {
@RequestMapping("/getUser")
public String getUser(int i ){
int j = 1/i;
return "返回"+j;
} }
小伙伴们注意了啊~~~
我在给大家写教程时候,发现了一个小问题,初学者们要注意了哦~!
@controlleradvice注解不起作用,Spring要扫描到!我这里的之前的目录结构不更改的前提下:
应该这样:

一定要把
GlobalException这个类扫到呀!!! 重启后,访问:
Spring Boot2.0之全局捕获异常的更多相关文章
- Spring Boot2.0 设置拦截器
所有功能完成 配置登录认证 配置拦截器 在spring boot2.0 之后 通过继承这个WebMvcConfigurer类 就可以完成拦截 新建包com.example.interceptor; 创 ...
- Spring Boot2.0 静态资源被拦截问题
在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截.但是在spring1.0+的版本中,是不会拦截静态资源的. 因此,在使用Spring Boot2.0+时,配置拦截 ...
- Spring Boot2.0使用Spring Security
一.Spring Secutity简介 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性 ...
- spring boot2.0(一 ) 基础环境搭建
1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...
- Spring Boot2.0 整合 Kafka
Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进 ...
- Spring Boot2.0自定义配置文件使用
声明: spring boot 1.5 以后,ConfigurationProperties取消locations属性,因此采用PropertySource注解配合使用 根据Spring Boot2. ...
- Spring boot2.0 设置文件上传大小限制
今天把Spring boot版本升级到了2.0后,发现原来的文件上传大小限制设置不起作用了,原来的application.properties设置如下: spring.http.multipart.m ...
- spring boot 2.0(一)权威发布spring boot2.0
Spring Boot2.0.0.RELEASE正式发布,在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误,然后Spring ...
- 【spring cloud】spring cloud2.X spring boot2.0.4调用feign配置Hystrix Dashboard 和 集成Turbine 【解决:Hystrix仪表盘Unable to connect to Command Metric Stream】【解决:Hystrix仪表盘Loading...】
环境: <java.version>1.8</java.version><spring-boot.version>2.0.4.RELEASE</spring- ...
随机推荐
- hdu 5339 Untitled【搜索】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5339 题意:一个整数a 和一个数组b.问你能否在b中取出r个元素排列组成c数组满足a%c1%c1%-. ...
- vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值
axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...
- 关于顺序磁盘IO比内存随机IO快的讨论
这个问题来源于我书中引用的一幅图: 我们从图中明显可以看某性能测试的结果表明普通机械磁盘的顺序I/O性能指标是53.2M values/s,SSD的顺序I/O性能指标是42.2M values/s,而 ...
- Linux内核中链表的学习
一.自己学习链表 数组的缺点:(1)数据类型一致:(2)数组的长度事先定好,不能灵活更改. 从而引入了链表来解决数组的这些缺点:(1)结构体解决多数据类型(2)链表的组合使得链表的长度可以灵活设置. ...
- android:scrollbar的一些属性
1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...
- Content Security Policy
资料来源:阮一峰博客 一.背景 XSS最常见,危害最大的网页安全漏洞,“网页安全政策”从根本上解决问题 二.简介 CSP的实质是白名单制度,明确告诉客户端那些外部资源可以加载和执行. CSP 大大增强 ...
- js 显示当前系统时间
<div id="test"></div> <script > setInt ...
- JavaScript--基于对象的脚本语言学习笔记(一)
1.两种嵌入js的方式 使用javascript前缀构建url:<a href="javascript:alert('执行JavaScript. .')">执行j ...
- oauth学习
https://www.cnblogs.com/blowing00/p/4524132.html
- Centos 7.0防火墙问题
从Centos7开始,自带的防火墙从iptables更改成了firewall.一般在企业环境,出于人力和稳定性考虑,还是用成熟的技术比较稳妥. 以下是关闭firewall的方法 systemctl s ...
