博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot----处理异常
阅读量:5248 次
发布时间:2019-06-14

本文共 2764 字,大约阅读时间需要 9 分钟。

原理:略

定制错误html页面

在有thymeleaf模板引擎下:

1、在template下创建error目录,在error目录中,创建404.html页面,如果发生错误代码为404,就会去找这个页面(可以创建所有的状态码页面)

2、在error目录中,创建4xx.html页,如果找不到对应的状态码页面,就会去找4xx.html页面(注意4xx.html就是4xx)

获取时间戳                [[${timestamp}]]  
获取状态码 [[${status}]]
获取错误信息 [[${error}]]
获取异常对象 [[${exception}]]
获取异常信息 [[${message}]]
JSR303数据验证错误 [[${errors}]]

在没有thymeleaf模板引擎下:

在static下创建error目录,在error目录中,创建404.html页面,如果发生错误代码为404,就会去找这个页面(可以创建所有的状态码页面)

只是不能 [[${timestamp}]] 通过这样获取错误信息了

 

定制错误json数据

application.properties (SpringBoot 2.x),如果没有特殊需求,默认false也是可以的

server.error.include-exception=true  //保证 [[${exception}]] 可以获取到数据

  

1、创建自定义错误对象

public class Myexception extends RuntimeException {    public Myexception() {        super("错误消息");    }}

2、contoller

@RequestMapping(value = "userlist")public String userlist(){        if (true){            throw new Myexception();  //模拟服务器发生错误        }}

 

3.1如果抛出服务器错误没有被处理,就会返回5xx.html文件

5xx.html

获取时间戳                [[${timestamp}]]  
获取状态码 [[${status}]]
获取错误信息 [[${error}]]
获取异常对象 [[${exception}]]
//可以获取到异常的对象了获取异常信息 [[${message}]]
//可以获取到异常的消息了JSR303数据验证错误 [[${errors}]]

3.2 处理服务器抛出的错误,直接返回一个json数据,上面配置的html失效(注意:此时浏览器和客户端返回的都是json数据)

@ControllerAdvicepublic class MyExceptionHandler {    @ResponseBody    @ExceptionHandler  //@ExceptionHandler(MyException.class)处理某一个错误    public Map
handleException(Exception e){ Map
map = new HashMap<>(); map.put("code",400); map.put("message","请求出现错误"); return map; }}

3.3 如果需要浏览器访问返回html,客户端返回json

@ControllerAdvicepublic class MyExceptionHandler {    @ExceptionHandler    public String handleException(Exception e, HttpServletRequest request){        //重定向到/error的时候需要手动设置状态码,默认javax.servlet.error.status_code=200        request.setAttribute("javax.servlet.error.status_code",404);        //可以给MyErrorAttributes传入数据;        Map
map = new HashMap<>(); request.setAttribute("map",map); return "forward:/error"; }}@Componentclass MyErrorAttributes extends DefaultErrorAttributes{ @Override public Map
getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) { //如果不需要自带的错误返回消息,可以不用继承,自己new LinkedHashMap<>();返回它就可以了 Map
map = super.getErrorAttributes(webRequest, includeStackTrace); //可以直接创建数据 map.put("code",404); map.put("message","请求错误"); //可以从handleException中获取数据 Object map1 = webRequest.getAttribute("map", 0); map.put("map1",map1); return map; }}

  

 

转载于:https://www.cnblogs.com/yanxiaoge/p/11364752.html

你可能感兴趣的文章
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
Java内部类详解
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>