SpringBoot自定义错误信息,SpringBoot自定义异常处理类,

SpringBoot异常结果处理适配页面及Ajax请求,

SpringBoot适配Ajax请求

================================

©Copyright 蕃薯耀 2018年3月29日

http://www.cnblogs.com/fanshuyao/

附件&源码下载见:http://fanshuyao.iteye.com/blog/2414865

一、自定义异常处理类:

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import javax.servlet.http.HttpServletRequest;
  4. import org.springframework.web.bind.annotation.ControllerAdvice;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import com.lqy.springboot.component.CustomErrorAttribute;
  7. @ControllerAdvice
  8. public class CustomExceptionHandler {
  9. /**
  10. * 自定义异常数据
  11. * 缺点,没有适配页面和Ajax请求,返回的数据都是json数据
  12. * @param req
  13. * @return
  14. */
  15. /*@ResponseBody
  16. @ExceptionHandler(Exception.class)
  17. public Map<String, Object> exceptionHandler(HttpServletRequest req){
  18. Map<String, Object> map = new HashMap<String, Object>();
  19. map.put("errorCode", 500);
  20. map.put("errorMsg", "错误信息");
  21. map.put("errorSystem", "errorSystem");
  22. return map;
  23. }*/
  24. /**
  25. * 自定义异常数据
  26. * 适配页面和Ajax请求
  27. * 注解ExceptionHandler(Exception.class)的Exception.class可以替换成自己定义的错误异常类
  28. * @param req
  29. * @return
  30. */
  31. @ExceptionHandler(Exception.class)
  32. public String exceptionHandler(HttpServletRequest req){
  33. Map<String, Object> map = new HashMap<String, Object>();
  34. map.put("errorCode", 500);
  35. map.put("errorMsg", "错误信息");
  36. map.put("errorSystem", "errorSystem");
  37. req.setAttribute(CustomErrorAttribute.CUSTOM_ERROR_MAP_NAME, map);
  38. //传入自己的错误代码,必须的,否则不会进入自定义错误页面,见:org.springframework.boot.autoconfigure.web.AbstractErrorController
  39. req.setAttribute("javax.servlet.error.status_code", 500);
  40. //转发到springBoot错误处理请求,能适配网页和Ajax的错误处理
  41. //请求/error后,会进入BasicErrorController(@RequestMapping("${server.error.path:${error.path:/error}}"))
  42. //页面的数据显示处理是使用:errorAttributes.getErrorAttributes获取显示的,是AbstractErrorController的方法
  43. //当需要把自己定义的Map错误信息传递到错误提示页面时,
  44. //可以编写一个自定义错误属性类处理:CustomErrorAttribute,继承DefaultErrorAttributes类,
  45. //重写getErrorAttributes(RequestAttributes requestAttributes, boolean includeStackTrace)方法
  46. return "forward:/error";
  47. }
  48. }

异常捕捉后请求转发到

  1. return "forward:/error";

是为了让SpringBoot底层处理,协助系统适配页面返回结果和Ajax返回结果:当是页面打开时,会跳转到相应的错误页面显示异常信息,当是Ajax请求或者使用工具请求时,返回的json字符串。(下面有图)

SpringBoot适配页面返回结果和Ajax返回结果的代码如下:

  1. @RequestMapping(produces = "text/html")
  2. public ModelAndView errorHtml(HttpServletRequest request,
  3. HttpServletResponse response) {
  4. HttpStatus status = getStatus(request);
  5. Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(
  6. request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));
  7. response.setStatus(status.value());
  8. ModelAndView modelAndView = resolveErrorView(request, response, status, model);
  9. return (modelAndView == null ? new ModelAndView("error", model) : modelAndView);
  10. }
  11. @RequestMapping
  12. @ResponseBody
  13. public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
  14. Map<String, Object> body = getErrorAttributes(request,
  15. isIncludeStackTrace(request, MediaType.ALL));
  16. HttpStatus status = getStatus(request);
  17. return new ResponseEntity<Map<String, Object>>(body, status);
  18. }

二、自定义异常信息传递类

  1. import java.util.Map;
  2. import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes;
  3. import org.springframework.stereotype.Component;
  4. import org.springframework.web.context.request.RequestAttributes;
  5. @Component
  6. public class CustomErrorAttribute extends DefaultErrorAttributes {
  7. public static final String CUSTOM_ERROR_MAP_NAME = "customErrorMap";
  8. @Override
  9. public Map<String, Object> getErrorAttributes(RequestAttributes requestAttributes, boolean includeStackTrace) {
  10. Map<String, Object> map = super.getErrorAttributes(requestAttributes, includeStackTrace);
  11. //设置传递自己定义的错误信息
  12. map.put(CUSTOM_ERROR_MAP_NAME, requestAttributes.getAttribute(CUSTOM_ERROR_MAP_NAME, RequestAttributes.SCOPE_REQUEST));
  13. return map;
  14. }
  15. }

定义这个类,是为了传递自己想要显示的错误信息,例如在Controller发生错误时,想把某些特殊信息传到错误页面,就可以自定义一个异常信息处理类,传递自己的自定义错误信息,同时也兼容SpringBoot本身定义好的错误 信息。

三、页面显示异常信息

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>500</title>
  6. </head>
  7. <body>
  8. <div>500错误</div>
  9. <div>path:[[${path}]]</div>
  10. <div>status:[[${status}]]</div>
  11. <div>timestamp:[[${#dates.format(timestamp, 'yyyy-MM-dd HH:mm:ss')}]]</div>
  12. <div>error:[[${error}]]</div>
  13. <div>exception:[[${exception}]]</div>
  14. <div>message:[[${message}]]</div>
  15. <div>errors:[[${errors}]]</div>
  16. <!-- 自定义属性 -->
  17. <div>customErrorMap.errorMsg:[[${customErrorMap.errorMsg}]]</div>
  18. <div>customErrorMap.errorSystem:[[${customErrorMap.errorSystem}]]</div>
  19. <div>customErrorMap.errorCode:[[${customErrorMap.errorCode}]]</div>
  20. </body>
  21. </html>

页面显示结果:

Post请求结果:

项目源码见附件:SpringBoot-自定义错误.zip

======SpringBoot自定义错误页面见:======

SpringBoot自定义错误页面,SpringBoot 404、500错误提示页面

SpringBoot 4xx.html、5xx.html错误提示页面

http://www.cnblogs.com/fanshuyao/p/8668072.html

================================

©Copyright 蕃薯耀 2018年3月29日

http://www.cnblogs.com/fanshuyao/

SpringBoot自定义错误信息,SpringBoot适配Ajax请求的更多相关文章

  1. SpringBoot自定义错误页面,SpringBoot 404、500错误提示页面

    SpringBoot自定义错误页面,SpringBoot 404.500错误提示页面 SpringBoot 4xx.html.5xx.html错误提示页面 ====================== ...

  2. springboot自定义错误页面

    springboot自定义错误页面 1.加入配置: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { re ...

  3. 自定义错误信息并写入到Elmah

    在ap.net Web项目中一直使用Elmah进行日志记录, 但一直有一个问题困扰我很久,那就是我如何自己生成一个错误并记录到Elmah里去. 你知道有时你需要在项目中生成一个错误用于一些特殊的需求 ...

  4. 自定义 ocelot 中间件输出自定义错误信息

    自定义 ocelot 中间件输出自定义错误信息 Intro ocelot 中默认的 Response 中间件在出错的时候只会设置 StatusCode 没有具体的信息,想要展示自己定义的错误信息的时候 ...

  5. 前端:参数传错了,spring-boot:那错误信息我给你显示的友好点儿

    之前两篇文章 Spring-boot自定义参数校验注解和如何在spring-boot中进行参数校验,我们介绍了,参数校验以及如何自定义参数校验注解,但是当传递参数出错时,只是把错误信息打印到了控制台, ...

  6. ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误

    今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...

  7. Springboot - 自定义错误页面

    Springboot 没找到页面或内部错误时,会访问默认错误页面.这节我们来自定义错误页面. 自定义错误页面 1.在resources 目录下面再建一个 resources 文件夹,里面建一个 err ...

  8. springboot自定义错误页面(转)

    方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = "error ...

  9. jquery.validate使用 - 自定义错误信息

    自定义错误消息的显示方式 默认情况下,验证提示信息用label元素来显示, 并且会添加css class, 通过css可以很方便设置出错控件以及错误信息的显示方式. /* 输入控件验证出错*/form ...

随机推荐

  1. 关于数据库alter的一系列操作总结

    表操作 对于表的操作——创建(create),删除(drop)来说,基本上大家都很清楚,而作为很少被使用到的修改(alter)命令往往存在一些问题,现在做一下总结: 添加列:alter table 表 ...

  2. 网络编程(2)—UDP

    1.UDP协议: 将数据.源.目的封装成数据包,不需要建立连接 每个数据包大小在64K一下 因无需建立连接,所以是不可靠的 发送完毕,无需释放资源,速度快 2.UDP编程步骤: 发送端: 1.创建发送 ...

  3. Mysql InnoDB 数据更新导致锁表

    一.数据表结构 CREATE TABLE `jx_attach` ( `attach_id` int(11) NOT NULL AUTO_INCREMENT, `feed_id` int(11) DE ...

  4. MySQL 复习笔记

    本文内容 SQL 语句 创建数据库 创建数据表 数据完整性约束 四种基本字符类型说明 SQL 基本语句 类型转换函数 日期函数 数学函数 字符串函数 合并结果集 union CASE 函数用法 IF ...

  5. V8 下的垃圾回收机制

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 1.新生代算法 新生代中的对象一般存活时间较短,使用 Scavenge GC 算法. ...

  6. (原)GAN之pix2pix

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/9175281.html 论文: Image-to-Image Translation with Con ...

  7. 设置Linux交换分区

    Linux下可以创建两种类型的交换空间,一种是swap分区,一种是swap文件.前者适合有空闲的分区可以使用,后者适合于没有空的硬盘分区,硬盘的空间都已经分配完毕.例如:安装redhat的时候,你可以 ...

  8. Golang——垃圾回收GC(2)

    1 垃圾回收中的重要概念 1.1 定义 In computer science, garbage collection (GC) is a form of automatic memory manag ...

  9. Java对象的内存实际占用

    一.打包和使用方法参考我之前的这篇文章,本文主要是更新了测量的类及方法,实际测试这个方法更准确. https://www.cnblogs.com/yoyotl/p/8421287.html 二.新的测 ...

  10. django --- DetailView源码分析

    [背景] 最近在看django官方文档的class-based-views这一节的时候一直不得要领,感觉自己清楚,但是回想起来又没有脉络:于是没有办法只 能是“暗中观察”django的源码了. 刚打开 ...