springBoot静态资源路径映射配置不生效,浏览器访问为404

springBoot静态资源路径映射配置不生效,浏览器访问为404

因为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 来自定义静态资源路径模式。