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

Spring Boot如何在上下文根无尾斜杠时调用Controller方法

Spring Boot API 路由匹配问题

环境信息

  • Spring Boot版本:1.5.13.RELEASE
  • Spring Core版本:4.3.17.RELEASE
  • 上下文根配置(application.properties):
server.context-path=/hoge

当前Controller配置

@RequestMapping(value = "/")
public String default(
                HttpServletRequest request,
                HttpServletResponse response,
                SessionStatus sStatus,
                Model model, Locale locale) throws IOException, Exception {
        return login(request, response, sStatus, model, locale);
}

测试情况

  • 可正常调用的curl命令:
curl http://localhost:8080/hoge/
  • 无法调用的curl命令(不带尾斜杠):
curl http://localhost:8080/hoge
  • 尝试修改@RequestMapping为{"","/"},仍然无法匹配不带尾斜杠的请求。

已尝试的无效配置(附录)

ex1(无效)

@Controller
@RequestMapping(value = "")
public class TestAction {

     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, response, sStatus, model, locale);
     }
}

ex2(无效)

@Controller
@RequestMapping(value = "*")
public class TestAction {

     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, response, sStatus, model, locale);
     }
}

ex3(无效)

@Controller
public class TestAction {
     @RequestMapping(value = "")
     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, response, sStatus, model, locale);
     }
}

ex4(无效)

@Controller
public class TestAction {
     @RequestMapping(value = "*")
     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, response, sStatus, model, locale);
     }
}

解决方案

针对Spring Boot 1.5.x版本的这个问题,可通过以下方式解决:

方式一:配置全局尾部斜杠匹配

在application.properties中添加以下配置,让Spring MVC自动兼容带/不带尾斜杠的请求:

spring.mvc.pathmatch.trailing-slash=true
spring.mvc.pathmatch.use-suffix-pattern=false

方式二:自定义WebMvc配置类

创建配置类覆盖默认路径匹配规则,全局启用尾斜杠兼容:

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseTrailingSlashMatch(true);
    }
}

方式三:显式映射双路径

在Controller方法上同时映射空路径和斜杠路径,确保覆盖两种请求形式:

@RequestMapping(value = {"", "/"})
public String default(
                HttpServletRequest request,
                HttpServletResponse response,
                SessionStatus sStatus,
                Model model, Locale locale) throws IOException, Exception {
        return login(request, response, sStatus, model, locale);
}

注:需确保没有其他高优先级路由(如全局拦截器、其他Controller路由)覆盖该映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:30:46