2015-08-07 12 views
22

Sto avviando un tomcat incorporato tramite spring-boot e desidero pubblicare una pagina statica index.html come parte di un'applicazione in esecuzione.Come pubblicare la pagina di contenuto html statico in spring-boot

ma il seguente non funziona:

@SpringBootApplication 
public class HMyApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(MyApplication.class, args); 
    } 
} 


@RestController 
public class HomeContoller { 
    @RequestMapping("/") 
    public String index() { 
     return "index"; 
    } 
} 

src/main/resources/static/index.html 

Risultato: quando chiamo localhost:8080, vedo solo la parola "indice", ma non la mia pagina html. Perché?

+9

Questo perché '@ RestController' è una meta-annotazione per' @ Controller' e 'ResponseBody', ovvero scrive" indice "sul flusso di input della risposta. Dovresti usare '@ Controller' invece che" index "sia risolto come nome di vista. –

+0

Omg hai ragione, assolutamente. Probabilmente ero confuso sviluppando un '@ RestController 'fianco a fianco. Comunque ora sto ottenendo la seguente eccezione usando '@ Controller':' javax.servlet.ServletException: Impossibile risolvere la vista con nome 'index' in servlet con nome 'dispatcherServlet''. Non funziona nemmeno restituendo 'index.html'. – membersound

+0

Penso che il nome della vista dovrebbe essere 'static/index.html' –

risposta

16

Errore mio: ho avuto una classe aggiuntiva con annotazione @EnableWebMvc. Questo ha in qualche modo incasinato l'autoconfigurazione di avvio a molla. L'ho rimosso e ora funziona restituendo index.html.

+0

thx, questo era il mio problema anche – Janiiik

4

Per me questo ha funzionato, sono sicuro che c'è un modo migliore (come senza .html).

+0

se si utilizza la pagina JSP (index.jsp) Quindi è possibile utilizzare "indice" di ritorno. –

+0

Funziona, tuttavia, se modifico il Controller su una mappatura specifica dice 404. Ad esempio, Mappatura controller: @Controller @RequestMapping ("/ user)" e la mappatura del metodo: @RequestMapping ("/ {id}"), poi ho un errore 404. Funziona solo per la mappatura della richiesta "/". – KingKari

+0

Se è necessario disporre di dati JSON come risposta, è necessario utilizzare il mapping in una classe @RestController. Se hai bisogno di una vista, è complicato un po '. Che cosa vuoi fare? E di solito se si inseriscono le risorse statiche in una [struttura risorse/cartelle statiche funziona automaticamente a causa dell'avvio primaverile] (https://docs.spring.io/spring-boot/docs/current/reference/html/boot- caratteristiche-sviluppo-web-applications.html # boot-funzioni-primavera-MVC-static-content). Inoltre se usi/{id} dovresti avere nel parametro params un @PathVariable ("id") così funziona, non è sicuro se lo hai lasciato apposta di proposito. –

Problemi correlati