2016-03-13 7 views
8

Ho letto la seguente documentazione da spring.io e ha detto By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath tuttavia quando ho inserito il mio file index.html sotto /resources la stringa index è appena stata renderizzata. Attualmente index.html è in webapp e sto usando AngularJS.L'avvio di primavera non trova index.html nella cartella webapp

directory

MvcConfiguration

@Configuration 
public class MvcConfig { 

    @Bean 
    InternalResourceViewResolver viewResolver(){ 

     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/webapp/"); 
     resolver.setSuffix(".html"); 

     return resolver; 
    } 

} 

Servizio riposante per pagina indice

@RestController 
public class IndexController { 

    @RequestMapping("/") 
    public String index(){ 
     System.out.println("Looking in the index controller........."); 
     return "index"; 
    } 

} 

sulla mia console IDE Vedo Looking in the index controller...... stampato dal IndexController e sotto rete gli strumenti di sviluppo Chrome Ho solo vedi localhost 200.

index.html

<body> 

    <!--[if lt IE 7]> 
     <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> 
    <![endif]--> 

    <div ng-view></div> 

    <div>Angular seed app: v<span app-version></span></div> 
+0

Quindi cosa vuoi fare esattamente qui? hai inizializzato la tua app nella pagina indice ('ng-app')? –

+0

Prova questo 'resolver.setPrefix ("/");' poiché 'src/main/webapp' è già nel classpath. –

+0

@SanjayRawat, non ha funzionato ... – Drew1208

risposta

20

Spring Boot docs dice anche:

Non utilizzare la directory/webapp src/main se l'applicazione sarà confezionato come un vaso. Anche se questa directory è uno standard comune, lo funzionerà solo con il pacchetto di guerra e verrà ignorata in silenzio da la maggior parte degli strumenti di generazione se si genera un jar.

Spring Boot è molto supponente e funziona meglio quando non si tenta di resistere alle impostazioni predefinite. Non vedo alcun motivo per cui i file vengano inseriti in /src/main/webapp. Basta usare /src/main/resources/static per le tue risorse front-end. Questo è il posto più comune.

Servirà automaticamente questi file statici dall'URI radice, senza necessità di creare alcun livello radice Controller. In effetti il ​​tuo IndexController impedirebbe ai file front-end statici di essere pubblicati dall'URI radice. Non è necessario creare Controller per i file statici.

Inoltre, per la tua app non è necessario il resolver. La tua app è solo API REST consumata da un'applicazione angolare su singola pagina. Quindi il tuo template HTML è sul client. I risolutori di vista sono necessari se si sta eseguendo il templating HTML lato server (ad es. Con Thymeleaf o JSP). Quindi rimuovi anche quel pezzo.

+0

Sì, si dice che non si metta la pagina indice in webapps SE la stai mettendo in un barattolo. Ho fatto un file dummy index.html mettendolo in '/ src/main/resources/static' e la stringa' index' è stata ancora renderizzata. Ho bisogno di un RestAPI perché sto recuperando le informazioni dal '@ Servizio'. – Drew1208

+0

perché il tuo IndexController è mappato su "/".Quando vuoi servire file HTML statici dalla tua risorsa root, non dovresti avere alcun Controller mappato su "/". – luboskrnac

+0

Ho eliminato il controller e ha funzionato. Grazie – Drew1208

0
@RestController 
public class IndexController { 

    @RequestMapping("/") 
    public String index(){ 
     System.out.println("Looking in the index controller........."); 
     return "index"; 
    } 

} 

problema è qui, si sta utilizzando @RestController, quindi in questo caso, se si scrive "ritorno 'indice';" lo stivale a molla lo copre come una semplice risposta a stringa. È necessario utilizzare invece l'annotazione @Controller.