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

如何让ResourceHttpRequestHandler优先于参数化Controller

解决方案:让静态资源优先于Controller路由或排除特定路径

方案一:提升静态资源处理器优先级

Spring MVC中,Controller的路由映射(RequestMappingHandlerMapping)默认优先级高于静态资源处理器。通过给静态资源处理器设置更低的order值(数值越小优先级越高),可以让/static/**路径的请求先被资源处理器处理。

修改你的WebMvcConfig类:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/")
                .setOrder(-1); // 优先级设为-1,高于默认的Controller路由优先级(0)
    }
}

方案二:让Controller路由排除/static路径

直接在Controller的@RequestMapping中通过正则表达式限制路径变量group不能为static,这样/static/**的请求就不会匹配到该Controller。

修改你的HelloController类:

@RequestMapping("/{group:(?!static).*}/{item}")
@Controller
public class HelloController {

    @GetMapping("")
    @ResponseBody
    public String hello(@PathVariable("group") String group, @PathVariable("item") String item) {
        return "Hello %s/%s".formatted(group, item);
    }
}

这里的(?!static)是正则负向前瞻语法,表示group的值不能等于static。

方案选择

  • 如果需要所有静态资源路径都优先于Controller路由,选方案一;
  • 如果只需要排除特定路径(如/static)的Controller匹配,选方案二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:22:36