2016-12-02 6 views
1

Ich benutze Spring Boot mit Thymeleaf und ich versuche auf eine einfache Webseite zuzugreifen. Ich habe keinen Fehler beim Erstellen des Projekts. Nur diese beim Zugriff auf localhost:8080/greeting:"Keine Nachricht verfügbar" mit Spring Boot/Thymeleaf

Whitelabel Error Page 
This application has no explicit mapping for /error, so you are seeing this as a fallback. 
Fri Dec 02 15:36:04 CET 2016 
There was an unexpected error (type=Not Found, status=404). 
No message available 

Ich habe einen Controller:

package controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 

@Controller 
public class UserController { 

    @RequestMapping("/greeting") 
    public String user(@RequestParam(value = "name", required = false, defaultValue = "World") String name, Model model){ 
     model.addAttribute("name",name); 
     return "greeting"; 
    } 

} 

Ein Haupt:

package boot; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class Application { 

    public static void main (String[] args){ 
     SpringApplication.run(Application.class, args); 
    } 

} 

Und eine Webseite:

<!DOCTYPE html> 
<html xmlns:th="http://www.themyleaf.org"> 
<head> 
<meta charset="ISO-8859-1"/> 
<title>SecondMaven</title> 
</head> 
<body> 
    <p th:text="'Hello, '+ ${name} + '!!!!!'" /> 
</body> 
</html> 

Mein pom.xml:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-devtools</artifactId> 
    <optional>true</optional> 
</dependency> 

Ich habe keine Ahnung, was mit meinem Code falsch ist. Ich denke, dass es ein Konfigurationsproblem ist, aber bis jetzt hatte ich kein Glück. Ich würde jede Hilfe danken, danke.

+0

Wo hast du deine 'greeting.html'? –

+0

In src/main/resources/templates. – Chuck

Antwort

5

Lassen Sie uns einen genaueren Blick auf die Hauptanwendung Eintrag nehmen:

package boot; 
^^^^^^^^^^^^^ 

// imports 

@SpringBootApplication 
public class Application { ... } 

Die package boot zusammen mit einem @SpringBootApplication bedeutet, dass nur Komponenten in oder unter boot Paket wird im Anwendungskontext gescannt und registriert werden. Hier ist, wie der Controller wie folgt aussieht:

package controller; 
^^^^^^^^^^^^^^^^^^^ 

// imports 

@Controller 
public class UserController { 
    @RequestMapping("/greeting") 
    public String user(...) { ... } 
} 

Da es in dem controller Paket befindet, kann es nicht durch die @SpringBootApplication gescannt werden, daher ist es nicht registriert sein werde und nicht behandelt Anfragen an den /greeting Endpunkt .

Die einfachste Lösung ist, Ihre Controller (und andere zu scannende Komponenten) unter das boot Paket, z. boot.controller in Ihrem speziellen Fall.

Wie auch immer, Spring Boot erfordert kein spezielles Code-Layout, es gibt jedoch einige Best Practices, die helfen. Sie können diese Best Practices here auschecken.

+1

Das war es. Danke für deine Zeit und die Erklärungen! – Chuck

+0

Sie sind herzlich willkommen! –

1

Versuchen Sie folgendes:

@Controller 
public class UserController { 

    @RequestMapping("/greeting") 
    public ModelAndView user(@RequestParam(value = "name", required = false, defaultValue = "World") String name) { 
     return new ModelAndView("greeting").addObject("name", name); 
    } 
} 

Here Sie ein gleichwertiges Lauf Beispiel haben.

+0

Danke, aber das war nicht das Problem. Ich habe '@ SpringBootApplication' nicht richtig verwendet. – Chuck

1

Ich erinnere mich, Probleme mit selbstschließenden Tags in meiner begrenzten Erfahrung mit Thymeleaf zu haben. Versuchen Sie, die Elemente manuell zu schließen, zum Beispiel

<meta charset="ISO-8859-1"></meta> 

statt

<meta charset="ISO-8859-1"/> 
+1

Das Problem wurde dank Post unten gelöst. Trotzdem danke! – Chuck

Verwandte Themen