You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Filter对NoHandlerFoundException不生效的解决方法

问题分析与解决方案

原因

默认情况下,Spring在匹配不到请求处理器时,不会主动抛出NoHandlerFoundException,而是直接内部转发到错误页面,这个转发过程不会经过你自定义的Filter执行链,导致HTML压缩Filter无法作用于404错误页面的响应。

解决步骤

1. 全局异常处理器捕获404异常

创建全局异常处理器,捕获NoHandlerFoundException并转发到自定义错误页面,确保请求全程走Filter链:

@ControllerAdvice
@Order(HIGHEST_PRECEDENCE)
public class NotFoundExceptionHandler {

     @ExceptionHandler(NoHandlerFoundException.class)
     public String handleNoHandlerFoundException() {
          // 可在此添加错误信息传递逻辑
          return "error";
     }
}

2. 修改Spring配置

在application.properties中添加以下配置,让Spring在找不到请求处理器时抛出异常,并关闭默认静态资源映射:

spring.web.resources.add-mappings=false
spring.mvc.throw-exception-if-no-handler-found=true

3. 手动注册静态资源处理器

关闭默认静态资源映射后,需要手动注册静态资源的映射规则,避免出现静态资源找不到的警告:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/static/js/");
        // 按需添加其他静态资源路径映射
    }
}

相关参考

该问题可参考Spring项目的Issue #7653(spring-boot)和#29491(spring-framework)。

内容的提问来源于stack exchange,提问作者user5770200

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:12:45