SpringBoot全局异常错误页面的示例分析

这篇文章给大家介绍SpringBoot 全局异常错误页面的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

成都创新互联公司主要从事成都网站制作、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务香坊,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

SpringBoot 全局异常错误页面

1. 创建项目,依赖Web 和 thymeleaf

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

2. 准备两个异常错误页面

在template中创建error文件夹,在error文件夹中创建4xx.html 和 5xx.html

SpringBoot 全局异常错误页面的示例分析

3.准备自定义错误处理类

com.zhl.springbootexceptionjunit.controller.MyBasicErrorController

  • SpringBoot 出现异常时会查找 /error 视图, 如果没有则会根据错误码查找对应 error/400.html 之类的错误静态页面

  • 此处重写ErrorController,实现/error 视图,根据错误类型,跳转至对应的视图,由于使用视图技术,需引用模板引擎(本例用thymeleaf)

package com.zhl.springbootexceptionjunit.controller;import org.springframework.boot.web.servlet.error.ErrorController;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.context.request.ServletWebRequest;import org.springframework.web.context.request.WebRequest;import javax.servlet.http.HttpServletRequest;import java.util.Date;import java.util.HashMap;import java.util.Map;/** * 定制ErrorController,目的是能使SpringBoot找到自己定制的错误页面 * 大部分的代码BasicController一致,关键点是修改错误页面的路径 */@Controller@RequestMapping(value = "/error")public class MyBasicErrorController implements ErrorController {@RequestMapping(produces = {"text/html"})//返回给浏览器    public String handlerError(HttpServletRequest request, Model model){
        WebRequest webRequest = new ServletWebRequest(request);//对request进行包装,目的是能操作更多的方法        HttpStatus status = this.getStatus(request);//获取status        String path = (String) webRequest.getAttribute("javax.servlet.error.request_uri", 0);
        String message = (String) webRequest.getAttribute("javax.servlet.error.message", 0);if(message.equals("")){
            message = "No Available Message";
        }//携带错误数据信息        model.addAttribute("timestamp", new Date());
        model.addAttribute("statusCode", status.value());
        model.addAttribute("error", status.getReasonPhrase());
        model.addAttribute("message", message);
        model.addAttribute("path", path);int i = status.value() / 100;//判断是4xx还是5xx错误        if(i == 4){return "error/4xx";//使用自己定制的错误页面        }else if(i == 5){return "error/5xx";//使用自己定制的错误页面        }return null;
    }@RequestMapping//返回给客户端    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        WebRequest webRequest = new ServletWebRequest(request);//对request进行包装,目的是能操作更多的方法        HttpStatus status = this.getStatus(request);//获取status        Map<String, Object> map = new HashMap<>();if (status == HttpStatus.NO_CONTENT) {return new ResponseEntity(status);
        } else {

            String path = (String) webRequest.getAttribute("javax.servlet.error.request_uri", 0);
            String message = (String) webRequest.getAttribute("javax.servlet.error.message", 0);

            map.put("timestamp", new Date());
            map.put("statusCode", status.value());
            map.put("error", status.getReasonPhrase());
            map.put("message", message);
            map.put("path", path);return new ResponseEntity(map, status);
        }
    }protected HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");if (statusCode == null) {return HttpStatus.INTERNAL_SERVER_ERROR;
        } else {try {return HttpStatus.valueOf(statusCode);
            } catch (Exception var4) {return HttpStatus.INTERNAL_SERVER_ERROR;
            }
        }
    }@Override    public String getErrorPath() {return "null";
    }
}

4.测试 代码

com.zhl.springbootexceptionjunit.controller.UsersController

@Controllerpublic class UsersController {@RequestMapping("showinfo")public String showinfo(){
        String str=null;
        str.length();return "ok";
    }
}

测试1,运行时错误:

SpringBoot 全局异常错误页面的示例分析

测试2:无资源的情况

SpringBoot 全局异常错误页面的示例分析

关于SpringBoot 全局异常错误页面的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

当前题目:SpringBoot全局异常错误页面的示例分析
转载来源:https://www.cdcxhl.com/article38/gighpp.html

成都网站建设公司_创新互联,为您提供手机网站建设网站设计网站设计公司微信小程序响应式网站App开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都做网站