如何使 ResourceHttpRequestHandler 优先于参数化控制器

问题描述 投票:0回答:1

我想在

/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,或者可能优先考虑资源处理程序而不是控制器?

spring-boot spring-mvc
1个回答
0
投票

我得到了答案。关键是添加

@EnableWebMvc
setOrder
:

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.setOrder(-1)
                .addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.