Java 如何应用Spring5中引入的PathPatternParser?

Java 如何应用Spring5中引入的PathPatternParser?,java,spring,spring-boot,Java,Spring,Spring Boot,我想创建一个GET请求,将filepath作为路径变量 如Spring文档中所述,这应该可以通过使用以下命令实现:/resources/{*path} 我使用的是SpringBoot2.1.2,它使用Spring5 但是,当我像这样设置控制器方法时,请求与路由不匹配。预期的匹配路径将是例如/resources/some/filepath,这将导致路径变量“path”为/some/filepath @GetMapping(“/resources/{*path}”) 公共字符串内容(@PathVar

我想创建一个GET请求,将filepath作为路径变量

如Spring文档中所述,这应该可以通过使用以下命令实现:/resources/{*path}

我使用的是SpringBoot2.1.2,它使用Spring5

但是,当我像这样设置控制器方法时,请求与路由不匹配。预期的匹配路径将是例如/resources/some/filepath,这将导致路径变量“path”为/some/filepath

@GetMapping(“/resources/{*path}”)
公共字符串内容(@PathVariable字符串路径){
返回null;
}
我没有找到有关使用新PathPattern所需的任何配置的任何信息。我在Baeldung()上找到的关于这个新特性的另一条信息是,它没有提到任何关于配置的内容。所以我希望它能开箱即用,但事实并非如此

我克隆了贝尔东邮报中提到的项目。相应的单元测试将运行。当我将控制器方法和单元测试复制到我的项目中时,它失败了。所以我认为这与配置有关


谢谢你的帮助。

我终于找到了问题的原因

多亏了法比恩

AntPathMatcher是的默认实现。显示如何配置路径匹配器。但是,PathMatchConfigurer::setPathMatcher将PathMatcher作为参数,AntPathMatcher是PathMatcher的唯一实现,因此您无法在那里设置

我在Baeldung项目中找到PathPattern的唯一类是:

@Configuration
public class CorsWebFilterConfig {

    @Bean
    CorsWebFilter corsWebFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        corsConfig.setAllowedOrigins(Arrays.asList("http://allowed-origin.com"));
        corsConfig.setMaxAge(8000L);
        corsConfig.addAllowedMethod("PUT");
        corsConfig.addAllowedHeader("Baeldung-Allowed");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", corsConfig);

        return new CorsWebFilter(source);
    }

}
在Spring文档中,有一个名为Spring.mvc.pathmatch.matching strategy的属性,它被用作“根据注册映射匹配请求路径的策略选择”

默认值(截至当前日期)为ant path matcher,由于要使用PathPattern,因此需要将其写入application.properties文件:


spring.mvc.pathmatch.matching strategy=path pattern parser

Hi,您能给我们提供期望的匹配路径吗?您好,我编辑了我的问题并添加了一个示例。映射应该按预期工作(除了路径应该是“some/filepath”),您是否正确地发出了GET请求?是的,当我将路由更改为“/resources/**”时,我使用控制器方法到达。不确定您是否查看了正确的文档,请参阅:
@Configuration
public class CorsWebFilterConfig {

    @Bean
    CorsWebFilter corsWebFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        corsConfig.setAllowedOrigins(Arrays.asList("http://allowed-origin.com"));
        corsConfig.setMaxAge(8000L);
        corsConfig.addAllowedMethod("PUT");
        corsConfig.addAllowedHeader("Baeldung-Allowed");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", corsConfig);

        return new CorsWebFilter(source);
    }

}