全局捕获异常,很明显的错误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. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型(CSOM)基础

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览  client对象模型(CSOM)基础         在SP2 ...

  2. mysql rpm安装,以及修改charset

    http://my.oschina.net/u/1156660/blog/343154?fromerr=tmDGGiDL 修改charset: http://stackoverflow.com/que ...

  3. css样式控制元素固定在底部

    回复固定在底部:css样式用到了 box-sizing属性 box-sizing:border-box; -moz-box-sizing:border-box; /* Firefox */ -webk ...

  4. 在VS2013中打开Nuget

    1.工具→NuGet程序包管理器→程序包管理控制台 2.没有的话,就去  工具→扩展和更新   搜索nuget

  5. 再说java final变量

    http://blog.csdn.net/axman/article/details/1460544 从jdk1.0到今天,JAVA技术经过十余年的发展,技术上已经发生了巨大的变化.但final变量的 ...

  6. 【阿里云】Windows2008 FTP配置指南

    云服务器默认使用Windws 2008 IIS 中自带的FTP服务器.    1.添加FTP帐号    A. 选择[服务管理器]--[配置]--[本地用户和组]--[用户]:在空白处右键选择[新用户] ...

  7. oracle中字符串类似度函数实測

    转载请注明出处:http://blog.csdn.net/songhfu/article/details/40074795 主要利用:oracle函数-SYS.UTL_MATCH.edit_dista ...

  8. 小练习:用socket实现Linux和Windows之间的通信

    在日常生活中,绝大部分人使用的机器通常是windows系统,可是对于研发人员,开发.编译等工作往往是建立在linux机器上.其实.在服务器方面,Linux.UNIX和WindowsServer占领了市 ...

  9. WinForm程序打包工具InnoSetup使用说明图文教程

    WinForm程序打包工具InnoSetup使用说明图文教程 WinForm程序开发测试好了,如果将Debug/Release里面的文件发给客户使用,会让客户觉得你不够专业,但是使用VS自带的打包工具 ...

  10. 模拟struts2

    利用到的技术:dom4j和xpath 自己写一个Filter 在doFilter中拦截请求 // 2.1 得到请求资源路径            String uri = request.getReq ...