2017-12-08 3 views
6

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.

+0

Warum ist das getaggt npm? Dies scheint mit node.js nichts zu tun zu haben. –

+0

Da der statische Inhalt mit Punkten in Dateinamen erstellt wird, wird durch npm run build command erzeugt. – Marcoc1712

+0

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. –

Antwort

1

Ich schrieb dies eine sehr dumme Frage ... sollte

Problem war Browser-Cache und Projekt Reinigung. Stellen Sie sicher, dass Sie den Cache IMMER löschen (das liegt auf der Hand), aber bereinigen Sie das Projekt, von dem aus Sie den statischen Inhalt bereitstellen, nachdem Sie die Konfiguration geändert haben. Stoppen und neustarten JAVA ist nicht genug.

Das kostete mich drei Tage, aber jetzt funktioniert, und die richtige Konfiguration ist die erste, die ich geschrieben habe, keine Notwendigkeit für contentNegotiation Konfiguration.

Hoffen, das könnte einen Tag für andere retten!

+0

hast du mir meinen Tag gerettet –

Verwandte Themen