一.前言

基于上一篇 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 捕获异常统一处理的更多相关文章

  1. springboot2.0配置连接池(hikari、druid)

    springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...

  2. springBoot2.0 配置shiro实现权限管理

    一.前言 基于上一篇springBoot2.0 配置 mybatis+mybatisPlus+redis 这一篇加入shiro实现权限管理 二.shiro介绍 2.1 功能特点 Shiro 包含 10 ...

  3. [转帖]springboot2.0配置连接池(hikari、druid)

    springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...

  4. springboot学习入门简易版六---springboot2.0整合全局捕获异常及log4j日志(12-13)

    使用Aop实现 1创建异常请求 在原有项目基础上,jspController中创建一个可能发生异常的请求: /** * 全局捕获异常测试 * @param i * @return */ @Reques ...

  5. springBoot2.0 配置 mybatis+mybatisPlus+redis

    一.Idea新建springBoot项目 next到完成,然后修改使用自己的maven 等待下载包 二.pom.xml文件 <?xml version="1.0" encod ...

  6. springBoot2.0配置profile

    1. 使用yaml来配置,直接配置application.yml文件 server: port: 8888 spring: profiles: active: dev # 激活生产环境 --- # 测 ...

  7. SpringBoot2.0 配置多数据源

    一.简述 配置多数据源意思就是在一个项目中使用多个数据库,在项目使用中可以不用手动切换数据库来实现不同数据库的数据获取和更新. 源码地址: https://github.com/hanguilin/b ...

  8. springboot2.0动态多数据源切换

    摘要:springboot1.x到springboot2.0配置变化有一点变化,网上关于springboot2.0配置多数据源的资料也比较少,为了让大家配置多数据源从springboot1.x升级到s ...

  9. SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.AOP切面编程 1.什么是AOP编程 在软件业,AOP为Asp ...

随机推荐

  1. bzoj1059ZJOI2017矩阵游戏

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选 ...

  2. 【转】 Pro Android学习笔记(二七):用户界面和控制(15):FrameLayout

    FrameLayout FrameLayout通常只包含一个控件.如果我们在FrameLayout中设置多个控件,则第二个控件会堆叠在第一个控件上面,如此类推,一层一层地叠上去.下面的例子,我们在Fr ...

  3. GCC提供的几个內建函数

    参考 https://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Other-Builtins.html#Other-Builtins https://en.wikipe ...

  4. JavaScript-Tool-富文本:UEditor

    ylbtech-JavaScript-Tool-富文本:UEditor UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点.开源基于BSD协 ...

  5. Weblogic反序列化漏洞(CVE-2017-10271)复现

    通过POST发送xml数据对WebLogic Server组件的WLS Security子组件造成任意代码执行漏洞 影响版本:10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2 ...

  6. require用法及源码解析

    一.require()的基本用法 require语句内部逻辑: 当 Node 遇到 require(X) 时,按下面的顺序处理. (1)如果 X 是内置模块(比如 require('http'))  ...

  7. 【总结整理】overflow: auto/hidden;清除自己

    .top-nav{ font-size: 12px; font-weight: bold; list-style-type: none; border-bottom: 8px solid #DC4E1 ...

  8. Windows命令快捷打开

    Win+R或者在搜索中输入: control -- 控制面板 mstsc -- 远程连接 SnippingTool -- 截图工具

  9. 具体问题:3、hibernate跟Mybatis/ ibatis 的区别,为什么选择?

    第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀 ...

  10. php学习笔记-php中把浮点数转化为整数

    在php中有时候会遇到比如 14.6%3这种操作,php是会先把14.6转化为整数再做其它的操作,那么这个转化为整数的操作是floor(14.6)还是ceil(14.6)还是round(14.6)呢? ...