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 ...
随机推荐
- js的trim方法(转)
写成类的方法格式如下:(str.trim();) <script language="javascript"> String.prototype.trim=functi ...
- Javascript-- jQuery DOM篇(一)
DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 浏览器提供的一些原生 ...
- 201621123014《JAVA程序设计》第1周学习总结
1. 本章学习总结 关键字:JAVA特点.JDK.JVM.JRE.class.编译工具.JDK是JAVA的开发工具包,拥有JAVA需要的环境和各类JAVA工具,是JAVA的核心:JVM是JAVA虚拟机 ...
- leetcode 1 Two Sum(查找)
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- python字符串替换之re.sub()
re.sub(pattern, repl, string, count=0, flags=0) pattern可以是一个字符串也可以是一个正则,用于匹配要替换的字符,如果不写,字符串不做修改.\1 代 ...
- windows 安装 pytorch
之前都在服务器上跑pytorch,近来发现新版本可在windows上跑了,甚是开心. 环境: windows7 python3 无CPU 步骤: 1. 确保确保python版本在3.5.3/3.6. ...
- 影响Cache的几个HTTP头信息【转载http://hi.baidu.com/feilala_fly/item/f79eca08fbf389026c9048a7】
Http的Cache机制总共有4个组成部分: Cache-Control.Last-Modified(If-Modified-Since).Etag(If-None-Match) .Expires 服 ...
- redis的五种数据类型及应用场景
前言 redis是用键值对的形式来保存数据,键类型只能是String,但是值类型可以有String.List.Hash.Set.Sorted Set五种,来满足不同场景的特定需求. 本博客中的示例不是 ...
- keepalived基本应用解析
原地址:http://blog.csdn.net/moqiang02/article/details/37921051 概念简单认知: Keepalived:它的诞生最初是为ipvs(一些服务,内核中 ...
- Poj_1045
这道题难点在于基本物理知识和数学的结合. 得出公式后再code,那就是小菜一碟了. import java.util.Scanner; import java.lang.Math; public cl ...