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

Spring MVC中web.xml配置throwExceptionIfNoHandlerFound仍返回404问题

throwExceptionIfNoHandlerFound 配置不生效的常见原因及解决方案

常见原因

  • 版本不兼容:throwExceptionIfNoHandlerFound 是Spring 4.0版本新增的配置参数,若项目依赖的Spring框架版本低于4.0,该配置不会生效。
  • 开启了默认Servlet处理器:如果Spring MVC配置中开启了<mvc:default-servlet-handler/>(XML配置)或注解配置类中注册了默认Servlet处理器,DispatcherServlet会将未匹配到Handler的请求转发给Web容器的默认Servlet处理,此时不会抛出NoHandlerFoundException,直接返回404状态。
  • 全路径静态资源映射拦截:如果配置了/**规则的静态资源映射,所有请求会优先匹配静态资源,未匹配到的请求会由静态资源处理器直接返回404,不会进入抛出异常的逻辑。
  • 容器默认404拦截优先级更高:Tomcat等Web容器默认会捕获404状态码返回预设错误页,即使Spring抛出了NoHandlerFoundException,也可能被容器提前拦截,表现为直接返回404页面。

解决方案

  1. 升级Spring框架依赖至4.0及以上版本
  2. 移除不必要的默认Servlet处理器配置
  3. 调整静态资源映射规则,避免使用/**全路径匹配,建议将静态资源归类到统一路径下单独配置,例如仅映射/static/**路径下的静态资源
  4. 配置全局异常处理器捕获NoHandlerFoundException,示例代码:
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(NoHandlerFoundException.class)
    public ResponseEntity<Map<String, Object>> handleNotFound(NoHandlerFoundException e) {
        Map<String, Object> resp = new HashMap<>();
        resp.put("code", 404);
        resp.put("message", "请求路径不存在");
        return new ResponseEntity<>(resp, HttpStatus.NOT_FOUND);
    }
}
  1. 若使用Tomcat等容器,可在web.xml中配置自定义404错误页指向Spring的异常处理接口,避免容器提前拦截:
<error-page>
    <error-code>404</error-code>
    <location>/custom/404/handler</location>
</error-page>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:02