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

Spring Boot无效路径请求触发WelcomePageHandlerMapping异常而非返回404

问题原因及解决方案

核心原因

  • 无效的Accept请求头:你发送的Accept: yaml并非标准媒体类型,合法的YAML媒体类型应为application/yaml或text/yaml。Spring在解析这个无效头时会抛出InvalidMediaTypeException。
  • WelcomePageHandlerMapping的兜底逻辑:当请求路径/random/incorrect未匹配到任何@RestController接口时,DispatcherServlet会遍历所有注册的HandlerMapping。若你的应用中存在静态欢迎页(如src/main/resources/static/index.html),WelcomePageHandlerMapping会返回ResourceHttpRequestHandler尝试兜底处理请求——尽管请求路径不是根路径,该处理器仍会被触发。随后这个处理器在解析无效的Accept头时抛出异常,而非直接返回404。

DispatcherServlet只有在所有HandlerMapping都无法提供处理请求的Handler时才会返回404。由于WelcomePageHandlerMapping提供了可用的Handler,Servlet会调用它,最终因解析无效请求头抛出异常。

解决方案

  • 修正请求头:将Accept头改为合法值,示例:
    curl -X GET http://localhost:8080/random/incorrect -H "Accept: application/yaml"
    
  • 禁用欢迎页处理器:若无需静态欢迎页,在application.properties中添加配置:
    spring.mvc.welcome-page.enabled=false
    
  • 全局捕获异常:添加全局异常处理器,捕获InvalidMediaTypeException并返回规范响应:
    @RestControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(InvalidMediaTypeException.class)
        public ResponseEntity<String> handleInvalidMediaType(InvalidMediaTypeException ex) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                    .body("无效的Accept请求头: " + ex.getMessage());
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:33:33