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

