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 ...
随机推荐
- 【leetcode刷题笔记】N-Queens
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- Metaspoit的使用
一.环境的使用和搭建 首先我的攻击机和靶机都搭建在虚拟机上,选用的是VMware Workstation Pro虚拟机. 攻击机选用的是Linux kali 2017.2版本,而靶机安装的是XP sp ...
- 脚本手动执行正常,放cron中执行有问题的原因
问题原因: 1. crond服务没启动 2. 环境变量如 PATH LANG SHELL 等设置不对 3. 脚本中引用的文件地址是相对路径,而非绝对路径. 排查步骤: 以 check ...
- bzoj 2969: 矩形粉刷 概率期望
题目: 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形 ...
- 【Sublime Text 3】编译环境
1.默认编译时总会出现错误 报错: [Finished in 1.3s with exit code 1][cmd: ['gcc', 'V:\\Cynthia\\01.c']][dir: V:\Cyn ...
- MongoDB3.2.8创建初始用户
启动MongoDB前需要关闭配置文件中的auth选项,否则不能创建用户 首先创建用户管理用户 use admin db.createUser({user:'admin',pwd:'123456', r ...
- JUST第二界算法设计大赛题解
1.问题描述: 悠悠假期同叔叔一起去书店,他选中了六本书,每本书的单价(单位:元)分别为:3.1,1.7,2,5.3,0.9 和7.2.不巧的是,叔叔只带了十几块钱,为了让悠悠高兴,叔叔同意买书,但提 ...
- Android中EditTex焦点设置和弹不弹出输入法的问题(转)
今天编程碰到了一个问题:有一款平板,打开一个有EditText的Activity会默认弹出输入法.为了解决这个问题就深入研究了下android中焦点Focus和弹出输入法的问题.在网上看了些例子都不够 ...
- ng2 中使用echart
1.首先创建echarts指令 //echart.directive.ts important { Directive,ElementRef,Input,Ouput,Onchanges,OnInit, ...
- Random简介
Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要 ...