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 ...
随机推荐
- Java微信开发_03_使用测试号进行开发
今天进行自定义菜单的开发时,发现公众号没有自定义菜单的权限.于是想到用测试号,但微信服务器如何区分你要请求的是公众号还是测试号呢. 我们可以发现不同公众号的appID和appsecre是不同的,一对a ...
- SQL语言方方面面
1 数据库和SQL 1.1 数据库 DB, DBMS DBMS的种类: 层次性数据库, 关系型数据库, 非关系型数据库 RDBMS, 关系数据库管理系统 1.2 数据库的结构 RDBMS常见的系统结构 ...
- tensorflow CUDA 9.0安装成功
berli@berli-dev:~/tensorflow$ bazel-bin/tensorflow/examples/label_image/label_image 2017-12-18 00:04 ...
- 使用Visual Studio进行单元测试-Part5
本文主要介绍Visual Studio(2012+)单元测试框架的一些技巧: 如何模拟类的静态构造函数 如何测试某方法被调用过 如何测试某方法执行的次数 并行编程测试注意事项 一.如何模拟类的静态构造 ...
- HBase的bulkLoad
HBase的BulkLoad有两种方式: thinrow的机制是flatmap把cell的信息进行flatmap:适合少于1万列的数据集:thinrow的涵义就是少行多列: bulkload的机制则是 ...
- 在CentOS 7上安装Node.js的4种方法(包含npm)
Node.js和Javascript有着千丝万缕的联系,可以说Node.js让Javascript显得从未如此强大.好吧…微魔其实是个门外汉…但是这并不能阻碍微魔学习探索未知的信心~今天在国外闲逛,看 ...
- xml schema 中如何定义类似Map的结构
利用xs:unique关键字.在xs:element里添加unique节点,任意命名,然后用xs:selector来选择需要唯一的域, xs:field 里指定特定的字段. 例如:定义所有Item里的 ...
- SQL 常用语句收集
1.UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 2.SELECT * FROM TableA INNER JOIN TableB ON TableA.name = T ...
- js函数篇
1.闭包函数,作用:不污染全局变量, 定义:与外界隔离的独立作用域被称为闭包,使用函数实现该功能称为函数闭包: 写法: (function(){ function sayHello(){ conso ...
- MVC4.0 里的分析器错误
这种错误有很多,今天碰到了,代码段写在if里就回出错,应该是认冲了吧 @if (Web.Common.UserInfo.CurrentUserInfo != null) ...