【发布时间】:2018-05-23 04:04:25
【问题描述】:
我想通过 Spring 提供由 npm 构建产生的网页,一切正常,但无论真正的后缀是什么(css、js 或html)。
目录树是这样的:
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
...
这是应用程序类:
@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);
}
为了调试问题,我手动重命名了一些文件并且它可以正常工作,因此我将问题限制为包含点的文件名。
我看到有人解决了类似的问题,在 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);
}
}
现在它服务于所有 *.html,包括 page.01.html,但仍然不是 style.01.css 或 script.01.js。我认为是一个不同的问题,原来的问题由 ContentNegotiationConfigurer 解决。
【问题讨论】:
-
为什么这个标签是 npm?这似乎与 node.js 无关。
-
因为文件名中带点的静态内容是由 npm run build 命令生成的。
-
我认为这与您的问题无关,因为我认为如果您手动创建这些文件也会发生同样的情况,对吧?如果不是,那是一件需要明确提及的重要事情。
-
不,本身并不重要,从某种意义上说,无论您如何生成带有点的文件名,问题都会出现,但我认为这很重要,因为解释了为什么更改名称是禁止的去,所以它阻止了像“你为什么不简单地更改文件名?”这样的解决方案。或类似的。
-
那么你应该明确提到这一点,但是标签本身应该特定于问题/问题,而不是枚举所有“相关”技术。
标签: java spring spring-mvc