2017-12-08 134 views
6

Chciałbym serwować przez Spring strony internetowe wynikające z wbudowania npm i wszystko działa dobrze, ale nie mogłem obsłużyć zasobów o nazwie takiej jak main.xxxx.yyy no ważne, jaki jest prawdziwy sufiks (css, js lub html).Sprężyna obsługująca zawartość statyczną z kropką (kropkami) w nazwie pliku

drzewo katalogów jest tak:

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

Jest to klasa aplikacja:

@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); 
} 

Aby debugować problem mam ręcznie przemianowany na niektóre pliki i działa, więc mam ograniczył problem do nazw plików zawierających kropki.

Widziałem, że ktoś rozwiązał podobny problem dodając {zmienną:.} W mapowaniu żądań w kontrolerze, ale nie mam kontrolerów, więc nie mogłem wymyślić, jak to zrobić.

EDIT:

Odkryłam, że przy tej konfiguracji:

@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); 
    } 

} 

Teraz to wszystko służy * .html, zawarte page.01.html, ale nadal nie style.01.css lub script.01.js. Zakładam, że jest inny problem, a oryginalny został rozwiązany przez ContentNegotiationConfigurer.

+0

Dlaczego to tagged npm? Wydaje się, że nie ma to nic wspólnego z node.js. –

+0

Stanie zawartości statycznej kropkami w nazwach plików jest tworzone przez polecenie uruchamiania polecenia npm. – Marcoc1712

+0

Nie sądzę, że jest to istotne dla twojego problemu, ponieważ przypuszczam, że to samo by się stało, gdybyś utworzył te pliki ręcznie, prawda? A jeśli nie, należy o tym wyraźnie wspomnieć. –

Odpowiedz

1

pisałem ten powinien być bardzo głupie pytanie ...

Problem był cache przeglądarki i czyszczenie projekt. Pamiętaj, aby ZAWSZE wyczyścić pamięć podręczną (co jest oczywiste), ale wyczyść projekt, skąd obsługujesz statyczną zawartość po zmianie konfiguracji. Zatrzymaj i uruchom ponownie JAVA nie jest wystarczająca.

To kosztowało mnie trzy dni, ale teraz działa, a poprawna konfiguracja jest pierwszą, jaką opublikowałem, nie ma potrzeby konfiguracji ContentNegotiation.

Mam nadzieję, że to może zaoszczędzić dzień dla innych!

+0

uratowałeś mój dzień dzięki –