Mar*_*712 6 java spring spring-mvc
我想通过Spring提供npm中构建的网页,一切都运行正常,但无论真正的后缀是什么(css,js或html),我都无法提供像main.xxxx.yyy这样的资源.
目录树是这样的:
src/main/resource/resource
index.html
asset-manifest.json
favicon.ico
manifest.json
service-worker.js
static
css
main.fc656101.css
main.fc656101.css.map
js
main.91794276.js
main.91794276.js.map
media
banner.bdcf92f4.jpg
fontawesome-webfont.912ec66d.svg
...
Run Code Online (Sandbox Code Playgroud)
这是应用程序类:
@SpringBootApplication
public class Application {
private static Logger log=Logger.getLogger(Application.class.getName());
@Bean
WebMvcConfigurer configurer () {
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers (ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/static/*").
addResourceLocations("classpath:/static/");
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
super.configurePathMatch(configurer);
configurer.setUseSuffixPatternMatch(false);
}
};
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
Run Code Online (Sandbox Code Playgroud)
为了调试这个问题,我手动重命名了一些文件并且它可以工作,因此我将问题限制在包含点的文件名中.
我已经看到有人解决了在RestControllers中的请求映射中添加{variable:.+}的类似问题,但是我没有控制器,所以我无法弄清楚如何去做.
编辑:
我发现这个配置:
@Configuration
class ServletConfig extends WebMvcConfigurerAdapter {
@Override
public void configurePathMatch(final PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
configurer.setUseTrailingSlashMatch(false);
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
}
Run Code Online (Sandbox Code Playgroud)
现在它提供所有*.html,包括page.01.html,但仍然不是style.01.css或script.01.js.我假设是一个不同的问题,原始的问题由ContentNegotiationConfigurer解决.
我写的这应该是一个非常愚蠢的问题......
问题是浏览器缓存和项目清理。请务必始终清除缓存(这是非常明显的),但也要在更改配置后清除提供静态内容的项目。停止并重新启动 JAVA 是不够的。
这花了我三天的时间,但现在正在工作,并且正确的配置是我发布的第一个,不需要 contentNegotiation 配置。
希望这可以为其他人节省一天!
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |