使用Spring Boot / Thymeleaf“没有消息可用”

问题描述 投票:1回答:3

我正在使用Thymeleaf的Spring Boot,我正在尝试访问一个简单的网页。构建项目时我没有任何错误。访问localhost:8080/greeting时只有这一个:

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>

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

java spring spring-boot thymeleaf
3个回答
6
投票

让我们仔细看看您的主要应用程序条目:

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
投票

试试这个:

@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你有一个等效的运行示例。


1
投票

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

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

代替

<meta charset="ISO-8859-1"/>
© www.soinside.com 2019 - 2024. All rights reserved.