springboot-定制错误页面

本文讲解了在SpringBoot中如何定制错误页面,包括默认处理方式和自定义处理方式。通过抛出异常并使用@ExceptionHandler注解捕捉,设置状态码,实现跳转至自定义的错误页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前我有篇文章讲解了一下springboot的错误处理机制,这篇文章讲解一下在springboot中定制错误页面。
先看以下项目结构
在这里插入图片描述
我的错误页面都放在了templates的error文件夹下,这样可以使用模板引擎处理(我这里使用Thymeleaf模板引擎)

1.默认处理方式
当你未写任何处理错误的代码时,则会默认调用BasicErrorController类中的errorHtml()方法,跳转到相应的视图。(404错误跳转到404.html页面, 其他类型的跳到4xx.html页面,500错误跳转到500.html,其他类型的跳转到5xx.html页面)

2.自定义处理方式
我在这里抛出一个异常来模拟一下。
先给出代码,等下再具体讲解。

@Controller
public class ExceptionController {
    @GetMapping("/createError")
    public void createError() {
        String s = null;
        s.length();
    }
    
    @ExceptionHandler(NullPointerException.class)
    public ModelAndView exceptionHandlerOf4xx(HttpServletRequest request) {
        ModelAndView model = new ModelAndView();
        request.setAttribute("javax.servlet.error.status_code", 405);
        model.setViewName("forward:/error");
        return model;
    }
}

浏览器输入http://localhost:8080/createError ,则会抛出一个空指针异常,通过 @ExceptionHandler(NullPointerException.class) 捕捉到该异常。通过request.setAttribute(“javax.servlet.error.status_code”, 405); 设置状态码为405,然后请求转发到 error 文件夹下匹配具体的状态码.html页面。(因为我的项目没有创建 405.html 文件,所以会转发到 4xx.html 页面)。到此就可以成功跳转到我们自定义的错误页面了。

成功的关键步骤在与request.setAttribute(“javax.servlet.error.status_code”, 405); 这个方法。现在具体讲解一下。

BasicErrorController 为错误页面处器,其中的errorHtml()方法处理如何跳转到错误页面。现在进入该方法。
在这里插入图片描述
该方法中有一个getStatus()方法来获取状态码。再进入该方法。
在这里插入图片描述
该方法中通过request.getAttribute() 方法获取RequestDispatcher.ERROR_STATUS_CODE表示的错误状态码。我们再看一下RequestDispatcher.ERROR_STATUS_CODE是什么。
在这里插入图片描述
RequestDispatcher.ERROR_STATUS_CODE表示的是字符串(“javax.servlet.error.status_code”),通过调用request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE)获取该字符串表示的值既可以获取状态码。(答案就出来了,通过request.setAttribute();方法 来设置状态码,则可以跳转到 状态码.html 页面)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值