关键词:
一共两个文件,一个处理全局异常,保存信息到日志,另外一个负责返回异常信息给接口,只要将其文件添加到项目中,无需再做其他配置即可
1. MyExceptionHandler.java 全局异常处理类
优先执行此类,这里不好抓取404、403等错误信息
getMaps()请参考获取request中传递过来的参数信息
getHeaders()请参考获取request中传递过来的header信息
代码如下:
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
/**
* <h5>描述:全局异常处理类</h5>
* 优先执行此异常处理类
*
*/
@ControllerAdvice
public class MyExceptionHandler {
private final Logger log = LoggerFactory.getLogger(getClass());
@ExceptionHandler(value =Exception.class)
public String exceptionHandler(HttpServletRequest request, Exception e){
Map<String, Object> paramsMap = getMaps(request);
Map<String, Object> headersMap = getHeaders(request);
String requestUri = request.getAttribute("org.springframework.web.servlet.HandlerMapping.lookupPath").toString();
log.error("请求[{}]发生[{}]异常
参数[{}]
header[{}]", requestUri,e.getMessage(),paramsMap,headersMap, e);
// 返回错误信息,交给其他异常处理类处理
return e.getMessage();
}
// =================== private method ===================
/**
* <h5>功能:获取从request中传递过来的参数信息</h5>
*
* @return Map<String, Object>
*/
private Map<String, Object> getMaps(HttpServletRequest request){
Map<String, Object> paramMap = new HashMap<String, Object>();
Enumeration<String> enume = request.getParameterNames();
while (enume.hasMoreElements()) {
String key = (String) enume.nextElement();
String[] values = request.getParameterValues(key);
paramMap.put(key, values.length == 1 ? request.getParameter(key).trim() : values);
}
return paramMap;
}
/**
* <h5>功能: 获取从request中传递过来的header信息</h5>
*
* @return Map<String, Object>
*/
private Map<String, Object> getHeaders(HttpServletRequest request) {
Map<String, Object> headerMap = new HashMap<String, Object>();
Enumeration<?> er = request.getHeaderNames();//获取请求头的所有name值
String headerName;
while(er.hasMoreElements()){
headerName = er.nextElement().toString();
headerMap.put(headerName, request.getHeader(headerName));
}
return headerMap;
}
}
2. MyErrorController.java 全局错误信息处理类
后执行此类,此类可以有效抓取,404、403等信息,代码如下:
import javax.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.jnxj.common.vo.MessageBean;
/**
* <h5>描述:全局错误信息处理</h5>
* 执行完异常处理类之后执行此类
*/
@RestController
public class MyErrorController implements ErrorController {
@Override
public String getErrorPath() {
return "/error";
}
@RequestMapping("/error")
public String handleError(HttpServletRequest request) {
String message;
// 获取statusCode:401,404,500
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == 400) {
message = "语义有误,当前请求无法被服务器理解或请求参数有误";
} else if (statusCode == 401) {
message = "当前请求需要用户验证";
} else if (statusCode == 403) {
message = "权限不足";
} else if (statusCode == 404) {
message = "请求的资源不存在";
} else {
message = "系统不小心生病了,正在紧急修复中,请耐心等候...o(╥﹏╥)o";
}
MessageBean messageBean = new MessageBean();
messageBean.setCode(statusCode.toString());
messageBean.setMessage(message);
return JSONObject.toJSONString(messageBean);
}
}
springboot中全局异常处理器
SpringBoot中全局异常处理器,就是把错误异常统一处理的方法。等价于Springmvc中的异常处理器。步骤一:基于前面的springBoot入门小demo修改步骤二:修改HelloController类 修改HelloController,使得访问/hello一定会产生异常:someexce... 查看详情
uwp开发入门(二十一)——保持ui线程处于响应状态
GUI的程序有时候会因为等待一个耗时操作完成,导致界面卡死。本篇我们就UWP开发中可能遇到的情况,来讨论如何优化处理。 假设当前存在点击按钮跳转页面的操作,通过按钮打开的新页面,在初始化过程中存在一些耗... 查看详情
springboot系列springboot全局异常处理数据校验(代码片段)
五、SpringBoot全局异常处理、数据校验5.1SpringBoot异常处理5.1.1Controller层局部异常处理5.1.2基于@ControllerAdvice注解的Controller层的全局异常处理5.1.3HandlerExceptionResolver处理异常解析器5.2SpringBoot数据校验5.1SpringBoot异常处理我们知道在... 查看详情
springboot——全局异常处理
...异常页面动态异常页面自定义异常数据自定义异常视图在SpringBoot项目中,有默认对异常的处理的策略,也可以自己来定义全局异常处理方案。默认异常处理在请求处理方法中定义一个异常:inti=1/0;进行请求时,默认的错误页面... 查看详情
第二十一篇flowable之springboot集成flowableui(代码片段)
FlowableUI集成到SpringBootlecture:波波老师一、常见的整合方式 在Flowable工作流开发中大家最为头疼的应该就是流程设计器的整合了。常见的整合方式有两种在实际项目中集成FlowableUI这个官方的设计器通过开源的组件比如Logi... 查看详情
springboot全局异常处理
@ControllerAdvicepublicclassMyControllerAdvice{/***全局异常捕捉处理*@paramex*@return*/@ResponseBody@ExceptionHandler(value=Exception.class)publicObjecterrorHandler(HttpServletRequestrequest,HttpServletRespons 查看详情
java入门教程十一(异常处理)(代码片段)
在程序设计和运行的过程中,发生错误是不可避免的。尽管Java语言的设计从根本上提供了便于写出整洁、安全代码的方法,并且程序员也尽量地减少错误的产生,但是使程序被迫停止的错误的存在仍然不可避免。为此,Java提供... 查看详情
springboot全局异常处理
新建包com.chy.exception,包下新建类GlobalExceptionHandler:@ControllerAdvice//controller的增强publicclassGlobalExceptionHandler{@ExceptionHandler(Exception.class)//给controller添加异常处理,括号中指定要捕获处理哪种异常,Exception. 查看详情
springboot全局异常处理
0.使用@ExceptionHandler注解(Controller层面上) 严格来说不是全局,是单类异常处理,进行异常处理的方法必须与出错的方法在同一个Controller里面。packagecom.lvjing.controller;importcom.alibaba.fastjson.JSON;importcom.lvjing.bean.ResponseBeanWith 查看详情
java多线程快速入门(二十一)
CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能packagecom.cppdy;importjava.util.concurrent.CountDownLatch;classMyThread17extendsThread{privateCountDownLatchcountdownlatc 查看详情
springboot学习笔记:全局异常处理(代码片段)
SpringBoot可以使用@ControllerAdvice注解进行全局异常的处理,这样可以方便统一对异常的处理返回1.处理常见异常首先我们需要确定一个异常处理统一返回的格式@DatapublicclassBaseResult/***返回code,成功为0,失败为-1*/privateSt... 查看详情
mfc编程入门之二十一(常用控件:编辑框editcontrol)
上一节讲了静态文本框,本节讲的是编辑框(EditControl)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。在前面加法计算器的例子中已经演示了编辑框的基本应用。下面具体讲解编辑框的使用。 编辑框... 查看详情
《c#零基础入门之百识百例》(二十)异常处理--除数为0
C#零基础入门--穷举法前言一,异常处理概念二,实例练习--除数为02.1题目描述2.2问题分析2.3参考代码前言本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都... 查看详情
springboot全局异常统一处理(代码片段)
...ice&@ExceptionHandlerhttp异常ErrorControllerServlet异常Filter1.SpringBoot默认错误统一处理机制在基于SpringBoot的Web应用中,对于Http请求处理过程中发生的各种错误,如常见的400、404和500 查看详情
springboot全局异常处理(代码片段)
自定义异常类@EqualsAndHashCode(callSuper=true)@DatapublicclassCustomExceptionextendsRuntimeExceptionprivateIntegercode;publicCustomException(Stringmessage,Integercode)super(message);this.code& 查看详情
spring--springboot配置全局异常处理器
一、为什么要使用全局异常处理器?什么是全局异常处理器?就是把错误异常统一处理的方法。应用场景:1、当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句直接捕获,这时可以使用全局异... 查看详情
springboot的全局异常处理
前言本篇文章主要介绍的是SpringBoot的全局异常处理。GitHub源码链接位于文章底部。首先还是来看工程的结构在pom文件中添加相关依赖<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</j... 查看详情
springboot全局捕获异常处理!
packagecom.htli.util;importjava.util.HashMap;importjava.util.Map;importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg 查看详情