全局捕获异常,很明显的错误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之全局捕获异常的更多相关文章

  1. Spring Boot2.0 设置拦截器

    所有功能完成 配置登录认证 配置拦截器 在spring boot2.0 之后 通过继承这个WebMvcConfigurer类 就可以完成拦截 新建包com.example.interceptor; 创 ...

  2. Spring Boot2.0 静态资源被拦截问题

    在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截.但是在spring1.0+的版本中,是不会拦截静态资源的. 因此,在使用Spring Boot2.0+时,配置拦截 ...

  3. Spring Boot2.0使用Spring Security

     一.Spring Secutity简介     Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性 ...

  4. spring boot2.0(一 ) 基础环境搭建

    1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...

  5. Spring Boot2.0 整合 Kafka

    Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进 ...

  6. Spring Boot2.0自定义配置文件使用

    声明: spring boot 1.5 以后,ConfigurationProperties取消locations属性,因此采用PropertySource注解配合使用 根据Spring Boot2. ...

  7. Spring boot2.0 设置文件上传大小限制

    今天把Spring boot版本升级到了2.0后,发现原来的文件上传大小限制设置不起作用了,原来的application.properties设置如下: spring.http.multipart.m ...

  8. spring boot 2.0(一)权威发布spring boot2.0

    Spring Boot2.0.0.RELEASE正式发布,在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误,然后Spring ...

  9. 【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- ...

随机推荐

  1. hdu 5339 Untitled【搜索】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5339 题意:一个整数a 和一个数组b.问你能否在b中取出r个元素排列组成c数组满足a%c1%c1%-. ...

  2. vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值

    axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...

  3. 关于顺序磁盘IO比内存随机IO快的讨论

    这个问题来源于我书中引用的一幅图: 我们从图中明显可以看某性能测试的结果表明普通机械磁盘的顺序I/O性能指标是53.2M values/s,SSD的顺序I/O性能指标是42.2M values/s,而 ...

  4. Linux内核中链表的学习

    一.自己学习链表 数组的缺点:(1)数据类型一致:(2)数组的长度事先定好,不能灵活更改. 从而引入了链表来解决数组的这些缺点:(1)结构体解决多数据类型(2)链表的组合使得链表的长度可以灵活设置. ...

  5. android:scrollbar的一些属性

    1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  6. Content Security Policy

    资料来源:阮一峰博客 一.背景 XSS最常见,危害最大的网页安全漏洞,“网页安全政策”从根本上解决问题 二.简介 CSP的实质是白名单制度,明确告诉客户端那些外部资源可以加载和执行. CSP 大大增强 ...

  7. js 显示当前系统时间

    <div id="test"></div>                <script >                    setInt ...

  8. JavaScript--基于对象的脚本语言学习笔记(一)

    1.两种嵌入js的方式    使用javascript前缀构建url:<a href="javascript:alert('执行JavaScript. .')">执行j ...

  9. oauth学习

    https://www.cnblogs.com/blowing00/p/4524132.html

  10. Centos 7.0防火墙问题

    从Centos7开始,自带的防火墙从iptables更改成了firewall.一般在企业环境,出于人力和稳定性考虑,还是用成熟的技术比较稳妥. 以下是关闭firewall的方法 systemctl s ...