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
相关产品推荐
相关产品推荐

