springBoot2.0 配置@ControllerAdvice 捕获异常统一处理
一.前言
基于上一篇 springBoot2.0 配置shiro实现权限管理
这一篇配置 异常统一处理
二.新建文件夹:common,param

三.返回结果集对象
1.ResultData.java
package com.example.demo2.common; import lombok.Getter;
import lombok.Setter;
import lombok.ToString; import java.util.HashMap;
import java.util.Map; /**
* @author sssr
* @version 1.0
* @Description: 统一返回结果集对象
* @date 2019/2/20
*/
@Getter
@Setter
@ToString
public class ResultData {
private boolean ret;
private String msg;
private Object data; public ResultData() {
} public ResultData(boolean ret){
this.ret =ret;
} public static ResultData success(Object data, String msg){
ResultData resultData = new ResultData(true);
resultData.data = data;
resultData.msg = msg;
return resultData;
} public static ResultData success(Object data){
ResultData resultData = new ResultData(true);
resultData.data = data;
return resultData;
} public static ResultData success(){
return new ResultData(true);
} public static ResultData fail(String msg){
ResultData resultData = new ResultData(false);
resultData.msg = msg;
return resultData;
} public Map<String,Object> toMap(){
HashMap<String,Object> result = new HashMap();
result.put("ret",ret);
result.put("msg",msg);
result.put("data",data);
return result;
}
}
四.自定义全局异常类
1.GlobalException.java
package com.example.demo2.common; /**
* @author sssr
* @version 1.0
* @Description: 自定义异常类
* @date 2019/2/20
*/
public class GlobalException extends RuntimeException{
public GlobalException() {
} public GlobalException(String message) {
super(message);
} public GlobalException(String message, Throwable cause) {
super(message, cause);
} public GlobalException(Throwable cause) {
super(cause);
} public GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
五.异常捕获处理类
1.GlobalExceptionResolver.java
package com.example.demo2.common; import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController; import java.io.UnsupportedEncodingException;
import java.util.List; /**
* @author sssr
* @version 1.0
* @Description: 异常捕获处理类
* @date 2019/2/20
*/
@ControllerAdvice
@RestController
public class GlobalExceptionResolver { /**
* 全局异常处理
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
public ResultData exception(Exception e){
return ResultData.fail(e.getMessage());
} /**
* 自定义异常处理
* @param e
* @return
*/
@ExceptionHandler(GlobalException.class)
public ResultData globalException(Exception e){
return ResultData.fail(e.getMessage());
} /**
* lombok请求参数不合法异常处理
* @param e
* @return
* @throws UnsupportedEncodingException
*/
@ExceptionHandler(BindException.class)
public ResultData bindException(BindException e) throws UnsupportedEncodingException {
e.printStackTrace();
List<FieldError> fieldErrors = e.getFieldErrors();
String errorMsg="{";
for (FieldError fieldError:fieldErrors){
errorMsg+=fieldError.getField()+":"+fieldError.getDefaultMessage()+",";
}
if(errorMsg.length()>1){
errorMsg = errorMsg.substring(0,errorMsg.length()-1);
}
errorMsg+="}";
return ResultData.fail(errorMsg);
}
}
六.测试参数接收类
1.TestParam.java
package com.example.demo2.param; import lombok.Getter;
import lombok.Setter; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List; /**
* @author sssr
* @version 1.0
* @Description:
* @date 2019/2/20
*/
@Getter
@Setter
public class TestParam {
@NotBlank
private String msg;
@NotNull
private Integer id;
@NotEmpty
private List<String> list;
}

七.测试控制器
1.TestController.java
package com.example.demo2.controller; import com.example.demo2.common.GlobalException;
import com.example.demo2.param.TestParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; /**
* @author sssr
* @version 1.0
* @Description: 测试控制器
* @date 2019/2/20
*/
@RestController
@RequestMapping("/test")
public class TestController { @RequestMapping("/exception")
public String exception() throws Exception { throw new Exception("全局错误"); } @RequestMapping("/globalException")
public String globalException() throws GlobalException { throw new GlobalException("自定义错误"); } @RequestMapping("/bindException")
public String bindException(@Valid TestParam testParam) { return testParam.getMsg();
}
}
八.测试效果




springBoot2.0 配置@ControllerAdvice 捕获异常统一处理的更多相关文章
- springboot2.0配置连接池(hikari、druid)
springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...
- springBoot2.0 配置shiro实现权限管理
一.前言 基于上一篇springBoot2.0 配置 mybatis+mybatisPlus+redis 这一篇加入shiro实现权限管理 二.shiro介绍 2.1 功能特点 Shiro 包含 10 ...
- [转帖]springboot2.0配置连接池(hikari、druid)
springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...
- springboot学习入门简易版六---springboot2.0整合全局捕获异常及log4j日志(12-13)
使用Aop实现 1创建异常请求 在原有项目基础上,jspController中创建一个可能发生异常的请求: /** * 全局捕获异常测试 * @param i * @return */ @Reques ...
- springBoot2.0 配置 mybatis+mybatisPlus+redis
一.Idea新建springBoot项目 next到完成,然后修改使用自己的maven 等待下载包 二.pom.xml文件 <?xml version="1.0" encod ...
- springBoot2.0配置profile
1. 使用yaml来配置,直接配置application.yml文件 server: port: 8888 spring: profiles: active: dev # 激活生产环境 --- # 测 ...
- SpringBoot2.0 配置多数据源
一.简述 配置多数据源意思就是在一个项目中使用多个数据库,在项目使用中可以不用手动切换数据库来实现不同数据库的数据获取和更新. 源码地址: https://github.com/hanguilin/b ...
- springboot2.0动态多数据源切换
摘要:springboot1.x到springboot2.0配置变化有一点变化,网上关于springboot2.0配置多数据源的资料也比较少,为了让大家配置多数据源从springboot1.x升级到s ...
- SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.AOP切面编程 1.什么是AOP编程 在软件业,AOP为Asp ...
随机推荐
- 时间复杂度O(n)与空间复杂度O(1)
把输入规模看成x轴,所花时间/空间看成y轴.O(n)就是 y = x, y随x的增长而线性增长.一条斜线O(1)就是 y = 1,不管x如何变,y不变.一条与x平行的线 举个简单的例子,要从0加到n, ...
- JSP的一个增删改查例子和总结
总结的几点: 1.在jsp中注意<%! %>声明代码块中的变量只会在项目开始的时候第一次运行jsp的时候执行一遍,有点类似于java类中的static代码块,所以如果是会改变的值不应该声明 ...
- java事务(一)——事务特性
事务 什么是事务?事务通俗的讲就是要做的事,在计算机术语中一般指访问或更新数据库中数据的一个工作单元.说起事务,那么就要提到事务的ACID特性,即原子性(atomicity).一致性(consiste ...
- codeforces 612D The Union of k-Segments (线段排序)
D. The Union of k-Segments time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- codeforces 655C C. Enduring Exodus(二分)
题目链接: C. Enduring Exodus time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Gym - 100801G: Graph (贪心+set+拓扑)(好题)
题意:给定一个N点M边的有向图,叫你加最多K条边,使得最小拓扑序最大. 思路:不是那么简单的题. 参照了别人的代码, 最后想通了. 贪心原则: 用两个单调队列维护, 第一个序列S1单增, 表示当前入 ...
- IronPython for ASP.NET 部署注意事项
用 IronPython for ASP.NET 开发的网站,在部署时,除了发布 bin 目录下的 IronPython.dll, IronMath.dll, Microsoft.Web.IronPy ...
- 通用RowMapper封装查询结果到自定义类中
package object; import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.SQLExceptio ...
- CCS V5 使用教程一: 安装激活与创建工程
CCS下载与安装 下载地址 Liscense下载地址 安装教程 创建工程 工程创建教程
- 点击Button调用另一个Dialog
资源视图--Dialog--右键--添加资源--新建--对话框--然后在已经生成的对话框中(解决资源视图中的dialog下的新生成的那个)右键--添加类.例如:添加CMyNewDlg类,在所要调的代码 ...