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

Java Spring中如何处理所有未配置专属映射的请求地址

未定义映射路径统一处理方案

Spring MVC的路径匹配本身有优先级规则:精确匹配优先级高于通配符匹配,因此你已经定义的/、/admin这类精确映射不会被通用规则干扰,以下是两种常用实现方式:

方案1:通配符路径映射(无需额外配置)

直接新增一个通配符规则的接口即可,写法最简单:

  • 如果只需要匹配单层路径的未映射地址(比如/asdf这类根路径下的不存在地址),用/*:
@GetMapping("/*")
public String handleSingleLevelUnmappedPath() {
    // 替换为你需要转发的目标页面视图名
    return "not-found";
}
  • 如果需要匹配所有层级的未映射地址(比如/a/b/c、/user/test/123这类多层路径下的不存在地址),用/**:
@GetMapping("/**")
public String handleAllLevelUnmappedPath() {
    // 替换为你需要转发的目标页面视图名
    return "not-found";
}

注意:该方案默认只处理GET类型的未映射请求,如果需要覆盖POST、PUT、DELETE等其他请求方法,可以将@GetMapping替换为@RequestMapping("/**"),该注解默认支持所有HTTP请求方法。

方案2:全局异常捕获(覆盖所有请求方法)

如果需要统一处理所有请求方法的未映射路径,可以通过捕获NoHandlerFoundException实现,需要先修改配置开启相关开关:

  1. 添加配置项
    如果是application.yml格式配置:
    spring:
      mvc:
        throw-exception-if-no-handler-found: true
      web:
        resources:
          add-mappings: false
    
    如果是application.properties格式配置:
    spring.mvc.throw-exception-if-no-handler-found=true
    spring.web.resources.add-mappings=false
    
  2. 编写全局异常处理逻辑
    @ControllerAdvice
    public class GlobalWebExceptionHandler {
        @ExceptionHandler(NoHandlerFoundException.class)
        public String handleNoExistPath() {
            // 替换为你需要转发的目标页面视图名
            return "not-found";
        }
    }
    

注意:该方案关闭了默认的静态资源自动映射,如果你项目里有静态资源(css、js、图片等)需要访问,需要额外配置静态资源的放行规则,避免静态资源被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:03:27