Ich möchte über Spring die Webseiten aus einem Build in npm dienen und alles funktioniert gut, aber ich konnte Ressourcen mit Namen wie main.xxxx.yyy nicht dienen Egal was das echte Suffix ist (css, js oder html).Spring Serving statische Inhalte mit Punkt (en) in Dateiname
der Verzeichnisbaum ist wie folgt aus:
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
...
Dies ist die Anwendungsklasse:
@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);
}
Um das Problem zu debuggen Ich habe einige Dateien manuell umbenannt und es funktioniert, also habe ich hat das Problem auf die Dateinamen mit Punkten beschränkt.
Ich habe gesehen, dass jemand ein ähnliches Problem gelöst hat, indem er {variable:. +} In Request Mapping in RestControllers hinzufügt, aber ich habe keine Controller, also konnte ich nicht herausfinden, wie es geht.
EDIT:
ich gefunden habe, dass mit dieser Konfiguration:
@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);
}
}
Jetzt alles dient * .html, enthalten page.01.html, aber immer noch nicht style.01.css oder script.01.js. Ich nehme an, es ist ein anderes Problem und das Original wird von ContentNegotiationConfigurer gelöst.
Warum ist das getaggt npm? Dies scheint mit node.js nichts zu tun zu haben. –
Da der statische Inhalt mit Punkten in Dateinamen erstellt wird, wird durch npm run build command erzeugt. – Marcoc1712
Ich glaube nicht, dass das für Ihr Problem relevant ist, da ich davon ausgehen würde, dass das gleiche passiert, wenn Sie diese Dateien manuell erstellen, oder? Und wenn nicht, ist es wichtig, dies ausdrücklich zu erwähnen. –