我想在
/static/**
URL 下提供静态资源,同时我有一个带有 RequestMapping("/{group}/{item}")
的控制器。因此,当我尝试请求时,例如,/static/main.css
,它会将我路由到带有 group = "static", item = "main.css"
的控制器,这是我不想要的。
应用示例:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}
@RequestMapping("/{group}/{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/**
URL,或者可能优先考虑资源处理程序而不是控制器?
我得到了答案。关键是添加
@EnableWebMvc
和setOrder
:
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.setOrder(-1)
.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}