新建ResponseEntityExceptionHandler的继承类:(依然,需要入口类扫描)

/**
* @author sky
* @version 1.0
*/
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { public static final String DEFAULT_ERROR_VIEW = "exception"; @ExceptionHandler(value = Exception.class)
@ResponseBody
public Object handleOtherExceptions(final Exception exception, final HttpServletRequest request) {
if(isAjaxRequest(request)) {
return JSON.toJSONString(“这里是你需要返回的错误json信息”);
}else{
ModelAndView mav = new ModelAndView();
mav.addObject("exception", exception);
mav.addObject("url", request.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
} /**
* isAjaxRequest:判断请求是否为Ajax请求. <br/>
*
* @param request 请求对象
* @return boolean
* @since JDK 1.6
*/
public boolean isAjaxRequest(HttpServletRequest request){
String header = request.getHeader("x-requested-with");
if (null != header && "XMLHttpRequest".endsWith(header)) {
return true;
}
return false;
}
}

这里需要注意,springboot默认读取static下的静态资源,如需要使用templates下的,需要使用thymeleaf

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

exception.html

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head lang="en">
<meta charset="UTF-8" />
<title>异常处理</title>
</head>
<body>
<h1>Error Handler</h1>
<div th:text="'请求路径:' + ${url}"></div>
<div th:text="'异常信息:' + ${exception.message}"></div>
</body>
</html>

测试异常:

@RequestMapping(value = "/", produces = "text/plain;charset=UTF-8")
ModelAndView index(Date date) throws Exception {
ModelAndView mav = new ModelAndView();
mav.setViewName("demo1");
if (date == null) {
throw new Exception("测试异常");
}
return mav;
}

在使用过程中还发现其他问题:比如MissingServletRequestParameterException的错误并不会如同SpringMVC架构一样返回异常信息,直接是没有返回(当然这不排除是自己不熟的问题)

没有返回的原因,预计是框架吃掉了异常,可参考

先说为什么会出现这样的异常呢,比如在你的控制层参数中加入了注解@RequestParam,request为true(默认)的话,而请求又没有传这个参的话,就会发生错误。

这时候,想要自定义全局捕获是不行的,以为会报:模糊不清的启动错误,查出来是因为ResponseEntityExceptionHandler 中存在实现这个异常的捕获。所以多注册一个会报异常

所以直接重构吧(ResponseEntity返回类型可自定义)

 @Override
protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
JSONMessageResponse error = SystemResultUtil.error(, "缺少必要参数,参数名称为" + ex.getParameterName());
return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
}

springboot 统一管理异常信息的更多相关文章

  1. SpringBoot统一处理异常

    在springboot项目,报错有着默认的提示,这篇文章介绍一下如何统一处理异常. 新建项目,pom文件如下: <?xml version="1.0" encoding=&q ...

  2. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  3. 基于springboot实现http响应异常信息国际化

    背景 国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正. 本文提到的异常响应信息国际化是指:前端向后台发起请求,后台在处理 ...

  4. 测试开发专题:spring-boot统一异常捕获

    java异常介绍 异常时相对于return的一种退出机制,可以由系统触发,也可由程序通过throw语句触发,异常可以通过try/catch语句进行捕获并处理,如果没有捕获,则会导致程序退出并输出异常栈 ...

  5. SpringBoot开发二十二-统一处理异常

    需求介绍 首先服务端分为三层:表现层,业务层,数据层. 请求过来先到表现层,表现层调用业务层,然后业务层调用数据层. 那么数据层出现异常它会抛出异常,那异常肯定是抛给调用者也就是业务层,那么业务层会再 ...

  6. Ext.net 异常统一管理,铥掉可恶的 Request Failure

    Ext.net 异常统一管理,铥掉可恶的 Request Failure 看着这样的框框是不是很不爽 灭他.也不难.. .如果全部页面都有继承一个自定义的父类 ..那整个项目代码量就只有几行了.. 单 ...

  7. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  8. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  9. springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986

    1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7    get请求报400 异常信息为 The valid characters are ...

随机推荐

  1. springboot ajax返回html

    因为拦截器 或者是 shiro  拦截登陆接口

  2. UT源码+105032014018

    设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Cellphon ...

  3. docker安装MySQL8,目录挂载、配置用户名密码、忽略表名大小写、连接数、特殊字符、时区

    原文:docker安装MySQL8,目录挂载.配置用户名密码.忽略表名大小写.连接数.特殊字符.时区 一.环境配置 1.系统:centos7.3 2.docker版本:Docker version 1 ...

  4. IdentityServer4-前后端分离之Vue

    原文:IdentityServer4-前后端分离之Vue 前言 之前文章讲到如何使用Node.js+Express构建JavaScript客户端,实现前后端分离.本节将介绍如何使用Vue实现前后端分离 ...

  5. docker mysql 文件挂载和MySQL字符集设置

    原文:docker mysql 文件挂载和MySQL字符集设置 docker run -p 3306:3306 --name mysql -v /usr/local/mysql/my.cnf:/etc ...

  6. 【BZOJ 1089】[SCOI2003]严格n元树

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 设fi表示深度为i的树个数,si是fi的前缀和,即si为深度不超过i树的个数. 那么si=s[i-1]^n + 1 就是说 先选一个 ...

  7. 【codeforces 65A】Harry Potter and Three Spells

    [题目链接]:http://codeforces.com/problemset/problem/65/A [题意] 你有3种魔法; 1.可以将a单位的石头变成b单位的铅 2.可以将c单位的铅变成d单位 ...

  8. HDU——T 1068 Girls and Boys

    http://acm.hdu.edu.cn/showproblem.php?pid=1068 Time Limit: 20000/10000 MS (Java/Others)    Memory Li ...

  9. Memcached存储溢出

    Memcached存储溢出 测试数据生成程序: package com.stoon.test; public class TestFor { public static void main(Strin ...

  10. python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题

    preface: 近期帮师兄处理json文件,须要读到数据库里面,以备其兴许从数据库读取数据.数据是关于yelp站点里面的: https://github.com/Yelp/dataset-examp ...