因为Spring MVC 处理程序映射匹配请求路径的默认策略已从 AntPathMatcher 更改为PathPatternParser。
所以在配置文件中也配置了spring.mvc.pathmatch.matching-strategy=ant-path-matcher,但还是没有任何效果
@Slf4j
@Configuration
public class templateWebMvcConfig implements WebMvcConfigurer{
private static String localhostPath = "file:/Users/zhuyuanyang/Desktop/test/javaimg/";
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始解析地址");
registry.addResourceHandler("/images/**").
addResourceLocations(localhostPath);
log.info("结束解析地址");
}
}
Spring Boot 中,使用 addResourceLocations() 方法配置资源映射路径时,应将本地路径写成 "file:/" 形式的绝对路径。例如:
registry.addResourceHandler("/images/**").
addResourceLocations("file:/Users/zhuyuanyang/Desktop/test/javaimg/");
另外,如果您希望将项目打包成 jar 包之后,资源文件仍然能够被正常访问,可以使用 classpath 协议,将本地路径写成 "classpath:/" 形式的相对路径。例如:
registry.addResourceHandler("/images/**").
addResourceLocations("classpath:/static/images/");
这样,在项目打包成 jar 包之后,资源文件仍然能够被正常访问。
在 Spring Boot 2.3 之后,默认的 MVC 配置类 WebMvcAutoConfiguration 中已经不再使用 AntPathMatcher 作为默认的处理程序映射匹配策略了。如果您希望使用 AntPathMatcher,则需要手动注册它。
要使用 AntPathMatcher,您可以在启动类中添加以下代码:
@Bean
public AntPathMatcher antPathMatcher() {
return new AntPathMatcher();
}
然后,您还需要将该 AntPathMatcher 实例注入到需要使用它的地方。例如,如果您希望将其用于处理程序映射匹配,则可以使用以下代码:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AntPathMatcher antPathMatcher;
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setPathMatcher(antPathMatcher);
}
}
在这种情况下,您可能还需要在 application.properties 文件中删除 spring.mvc.pathmatch.matching-strategy=ant-path-matcher 配置。
另外,请确保您的静态资源路径配置是正确的。例如,如果您希望将 /static/** 映射到 classpath:/static/,则可以使用以下代码:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
注意,您可能还需要通过配置 spring.mvc.static-path-pattern 来自定义静态资源路径模式。