2016-12-02 143 views
1

我正在使用Thymeleaf的Spring Boot,并试图访问一个简单的网页。 构建项目时我没有任何错误。仅这一项访问localhost:8080/greeting时:使用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 

我有一个控制器:

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"; 
    } 

} 

主:

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); 
    } 

} 

和网页:

<!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> 

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> 

我对代码有什么问题没有任何线索。我认为这是一个配置问题,但到目前为止,我没有得到任何运气。 我将不胜感激任何帮助,谢谢。

+0

你在哪里把你的'greeting.html'? –

+0

在src/main/resources/templates中。 – Chuck

回答

5

让我们来看看你的主应用程序进入定睛一看:

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

// imports 

@SpringBootApplication 
public class Application { ... } 

package boot@SpringBootApplication沿着意味着只有在或正在boot封装组件将被扫描并在应用程序上下文注册。这里是你的控制器看起来的样子:

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

// imports 

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

因为它驻留在controller包,它不能由@SpringBootApplication扫描,因此它不会被注册,并不会处理请求的/greeting端点。

最简单的解决方案是在boot包装下移动您的控制器(以及其他要扫描的组件),例如, boot.controller在您的具体情况。

无论如何,Spring Boot并不需要任何特定的代码布局来工作,但是,有一些最佳实践可以提供帮助。您可以结帐这些最佳做法here

+1

就是这样。感谢您的时间和解释! – Chuck

+0

非常欢迎! –

1

试试这个:

@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你有一个相当的运行实例。

+0

谢谢,但那不是问题。我没有正确使用'@ SpringBootApplication'。 – Chuck

1

我似乎记得在我与Thymeleaf的有限经验中自我结束标签有问题。手动尝试关闭元素,例如

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

代替

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

感谢下面的帖子,问题解决了。不管怎样,谢谢你! – Chuck

相关问题