2014-12-09 7 views
76

Sono nuovo di Java e di Spring. Come posso mappare la mia app radice http://localhost:8080/ a una statica index.html? Se navighi su http://localhost:8080/index.html, funziona perfettamente.Java Spring Boot: come mappare la mia root app ("/") a index.html?

La mia struttura app è:

dirs

mio config\WebConfig.java assomiglia a questo:

@Configuration 
@EnableWebMvc 
@ComponentScan 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/**").addResourceLocations("/"); 
     } 
} 

Ho provato ad aggiungere registry.addResourceHandler("/").addResourceLocations("/index.html"); ma fallisce.

+1

Forse questo aiuta: http://stackoverflow.com/questions/20405474/spring-boot- context-root –

+3

@UdoKlimaschewski Mostra come mappare 'http: // localhost: 8080/appName' ma non è quello che mi serve ... – Shoham

risposta

96

Avrebbe funzionato fuori dalla scatola se non si fosse utilizzata l'annotazione @EnableWebMvc. Quando lo fai, spegni tutte le cose che Spring Boot fa per te in WebMvcAutoConfiguration. Si potrebbe rimuovere tale annotazione, o si potrebbe aggiungere indietro il controller della vista che si spento:

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

Grazie .. Non mi sono reso conto che ... non ho trovato un semplice demo nel loro sito che mostra che ... – Shoham

+7

Da [documenti di riferimento] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-auto -configuration): "Se si desidera mantenere le funzionalità MVC di Spring Boot e si desidera semplicemente aggiungere una configurazione MVC aggiuntiva (interce ptors, formatters, view controller ecc.) puoi aggiungere il tuo @Bean di tipo 'WebMvcConfigurerAdapte'r, ma senza' @ EnableWebMvc' " –

+1

Questo servirà' index.html' a '/'. Ma è possibile anche fare in modo che il browser cambi effettivamente l'url da '/' a '/ index.html'? – asmaier

36

Un esempio di risposta di Dave Syer:

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 
public class MyWebMvcConfig { 

    @Bean 
    public WebMvcConfigurerAdapter forwardToIndex() { 
     return new WebMvcConfigurerAdapter() { 
      @Override 
      public void addViewControllers(ViewControllerRegistry registry) { 
       // forward requests to /admin and /user to their index.html 
       registry.addViewController("/admin").setViewName(
         "forward:/admin/index.html"); 
       registry.addViewController("/user").setViewName(
         "forward:/user/index.html"); 
      } 
     }; 
    } 

} 
+0

Utilizzare WebMvcConfigurer invece di deprecato WebMvcConfigurerAdapter nella primavera 5. –

3

se si tratta di uno stivale Primavera App.

Spring Boot rileva automaticamente index.html nella cartella public/static/webapp. Se avete scritto qualsiasi controller @Requestmapping("/") avrà la precedenza la funzione di default e non mostrerà il index.html a meno che non si digita localhost:8080/index.html

+1

Ho creato un file src/main/resources/public/index.html e ha funzionato! Grazie –

2
@Configuration 
@EnableWebMvc 
public class WebAppConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addRedirectViewController("/", "index.html"); 
    } 

} 
Problemi correlati