springboot统一异常处理
时间:2020-05-27
本文章向大家介绍springboot统一异常处理,主要包括springboot统一异常处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
关于异常,参见:
Java异常
没有异常处理
controller中测试类:
@GetMapping("/testException")
public Integer testException(Integer a,Integer b) {
return a+b;
}
测试:
如果参数a和b中有一个为空,则会报空指针异常:
浏览器页面长这样:
全局统一异常处理
添加全局统一异常处理类:
package com.example.conf;
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.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* @author liuyj
* @Title: ControllerHandler 自定义处理异常
* @create 2020-05-14 10:45
* @ProjectName test
* @Description: TODO
*/
@ControllerAdvice
public class ControllerHandler {
@ExceptionHandler
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public ResultInfo handleException(Exception ex){
System.out.println("程序异常:"+ex.toString());
return new ResultInfo(5000,"请求失败");
}
}
再次测试:
自定义异常处理
添加异常UserNotExistException类:
public class UserNotExistException extends Exception{
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public UserNotExistException(Integer id){
this.id=id;
}
@Override
public String toString() {
return "用户不存在";
}
}
controller抛出异常:
@PostMapping("/getUser")
public boolean getUser() throws UserNotExistException {
throw new UserNotExistException(10);
}
先测试,我们只是抛出异常,并没有对异常进行处理:
添加异常处理:
package com.example.conf;
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.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* @author liuyj
* @Title: ControllerHandler 自定义处理异常
* @create 2020-05-14 10:45
* @ProjectName test
* @Description: TODO
*/
@ControllerAdvice
public class ControllerHandler {
@ExceptionHandler
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public ResultInfo handleException(Exception ex){
System.out.println("程序异常:"+ex.toString());
return new ResultInfo(5000,"请求失败");
}
/**
* 处理UserNotExistException异常
*/
@ExceptionHandler({UserNotExistException.class})
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public ResultInfo handleUserNotExistException(UserNotExistException ex) {
System.out.println("请求用户数据异常:" + ex.toString());
return new ResultInfo(5000, "请求用户数据失败");
}
}
测试:
可以看到已经处理。
测试之前的空指针异常,也没问题
被要求单独处理的异常会先被处理,而后其他异常会被Exception(默认形式)的处理方法捕获。
原文地址:https://www.cnblogs.com/liuyj-top/p/12976448.html
- Java多线程和并发基础面试问答
- easyui事件和方法的使用方法
- go语言实现通过FTP库自动上传web日志
- Go语言实现顺序存储的线性表实例
- hashpartitioner-Spark分区计算器
- Could not find artifact com.sun:tools:jar:1.5.0
- Java面试官最爱的volatile关键字
- Golang实现带优先级的channel
- java在指定目录下执行dos命令或者bat文件
- 搭建本地 golang 文档服务器
- 浅析Java中的final关键字
- 大话企业级android读书笔记(一)
- 转--Go语言用堆排序的方法进行一千万个int随机数排序
- go语言,变量引用的用法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Java——单例设计模式
- Java——包的定义及使用
- Java——Object类(基本概念、toString()方法、equals()方法、可以接收所有引用类型)
- JavaWeb——MyBatis框架之对数据库的增删改查操作CRUD实践及MyBatis参数的深入详解
- JavaWeb——MyBatis框架之入门总结及案例实战,常见坑处理:Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0
- JavaWeb——MyBatis框架之执行过程原理与解析(通过自定义MyBatis查询所有操作的实现来观察整个过程)
- Java——抽象类(基本概念、使用原则、模板设计模式)
- Java——覆写(概念、覆写的意义、覆写的要求)
- Java——继承性(继承的作用、实现、限制)
- JavaWeb——JSON语法讲解与Jackson解析器完成JSON数据与Java对象的转换(应用Ajax与JSON实现校验用户名是否在的功能)
- JavaWeb——JQuery之高级案例实战(打开网页自动弹出广告效果、抽奖效果实现)
- JavaWeb——JQuery之高级操作应用及实践案例总结(动画、遍历、事件绑定)
- Java——简单Java类深入(数据表与简单Java类、一对多映射、双向一对多映射、多对多映射)
- Java——代码块(普通块、构造块、静态块)
- JavaWeb——JQuery之五种选择器的应用及实践案例总结(基本选择器、层级选择器、属性选择器、过滤选择器、表单过滤选择器)