springboot学习(八十五) 解决springboot3.2找不到资源无法抛出404错误的问题

前言

springboot3.2以下可以定义ErrorPageRegistrar将404错误转发到一个接口地址,但升级到springboot3.2(spring6.1)后,该配置不生效,抛出了500错误。

以前的错误页面处理如下:

java 复制代码
@ConditionalOnClass(ErrorPageRegistry.class)
public class ErrorPageAutoConfiguration implements ErrorPageRegistrar {
    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        log.info("-----------错误页面路径配置------------");
        registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"),
                new ErrorPage(HttpStatus.FORBIDDEN, "/403"),
                new ErrorPage(HttpStatus.BAD_REQUEST, "/400"),
                new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500"));
        log.info("-----------错误页面路径配置结束------------");
    }
}

解决方式

通过查看日志发现springboot3.2默认寻找静态资源,在找不到资源后抛出了NoResourceFoundException,通过ExceptionAdivisor抓取做了处理,而并没有对NoResourceFoundException进行特殊处理,默认进入了500错误。

ExceptionAdivisor中添加一组对此异常的处理,即可:

java 复制代码
    @ExceptionHandler(value = NoResourceFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ResponseEntity to404Exception(NoResourceFoundException e) {
        AccessLogUtils.log(SpringUtils.getRequest(), _404);
        return res(HttpStatus.NOT_FOUND.value(), "找不到资源", e);
    }
相关推荐
苦学编程的谢1 小时前
Mybatis_4
java·spring boot·tomcat·mybatis·mybatis_plus
她说..2 小时前
MybatisPlus-快速入门
java·spring boot·spring cloud·微服务·mybatis·mybatisplus
tuokuac3 小时前
创建的springboot工程java文件夹下还是文件夹而不是包
java·spring boot·后端
Hejjon4 小时前
携带参数的表单文件上传 axios, SpringBoot
java·spring boot·后端
荔枝爱编程4 小时前
高性能企业级消息中心架构实现与分享(三):数据存储设计与高可用保障
spring boot·后端·消息队列
武昌库里写JAVA4 小时前
【MySQL】MySQL数据库如何改名
java·vue.js·spring boot·sql·学习
neoooo7 小时前
《锁得住,才能活得久》——一篇讲透 Redisson 分布式锁的技术实录
java·spring boot·redis
用户60830892904710 小时前
Spring Boot自定义注解
spring boot
hrrrrb11 小时前
【Spring Boot 快速入门】二、请求与响应
spring boot·后端
小七mod11 小时前
【Spring】Spring Boot启动过程源码解析
java·spring boot·spring·面试·ssm·源码