2015-02-10 13 views
17

c'ho cartella static con seguente struttura:Primavera non mappa le richieste delle cartelle di file `index.html`

index.html
docs/index.html

Spring Boot esegue correttamente il mapping delle richieste da / a index.html. Ma non mappa la richiesta /docs/ su /docs/index.html (la richiesta /docs/index.html funziona correttamente).

Come mappare le richieste di cartella/sottocartella ai file index.html appropriati?

+0

Condivide la mappatura vista del regolatore ho proposto risponde alla tua domanda? Se è così, per favore accettalo. Altrimenti, chiarisci il problema e sarò felice di aggiornare la mia risposta. – hzpz

risposta

2

Non è Spring Boot mappare a index.html è il motore servlet (è una pagina di benvenuto). C'è solo una pagina di benvenuto (secondo le specifiche) e la navigazione nella directory non è una caratteristica dei container.

+5

questo spiega il problema ma non suggerisce una soluzione, quindi non posso accettare questa risposta –

+1

Non penso che ci sia una soluzione diversa da quella di scrivere il proprio gestore di servlet del browser di directory. Posso suggerire che se ti va? –

18

È possibile aggiungere manualmente una mappatura View Controller per fare questo lavoro:

@Configuration 
public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/docs").setViewName("redirect:/docs/"); 
     registry.addViewController("/docs/").setViewName("forward:/docs/index.html"); 
    super.addViewControllers(registry); 
    } 
} 

La prima mappatura provoca Spring MVC per inviare un redirect al client se /docs (senza slash) viene richiesto. Ciò è necessario se si dispone di collegamenti relativi in ​​/docs/index.html. La seconda mappatura inoltra qualsiasi richiesta a /docs/ internamente (senza inviare un reindirizzamento al client) a index.html nella sottodirectory docs.

+0

Funziona anche con sottocartelle annidate: 'registry.addViewController ("/v2/docs "). SetViewName (" redirect:/v2/docs/");' e 'registry.addViewController ("/v2/docs/"). setViewName ("forward: /v2/docs/index.html"); ' –

0

Spring boot show index.html per impostazione predefinita.

ma index.html dovrebbe essere in /risorse/statico o /pubblico

esempio:

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-static