在Spring Boot示例应用程序中显示主机名时出现模板错误 - 宠物诊所

时间:2017-11-13 10:10:35

标签: java spring spring-mvc

我正在使用示例spring-petclinic Spring Boot应用程序进行我正在构建的演示。我正在尝试做一些看似超级基本的东西,但我正在努力(我是一个Java n00b)。

以下是示例应用:https://github.com/spring-projects/spring-petclinic

基本上我想在网站的欢迎页面上显示服务器主机名。

在WelcomeController.java文件(spring-petclinic/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java)中,我有以下内容:

package org.springframework.samples.petclinic.system;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
class WelcomeController {

    @RequestMapping("/")
    public String welcome() {
        return "Hello from " + System.getenv("HOSTNAME") + String.format("%n");
    }
}

我所取代的是从return "welcome"到您在上面看到的返回值。

构建完成,我可以运行应用程序,但页面加载时出现以下错误:

Something happened...

Error resolving template "Hello from d7710dcc2456 ", template might not exist or might not be accessible by any of the configured Template Resolvers

我玩过model.addAttribute并添加了额外的public String块,但有点超出我的深度!有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当您使用@RequestMapping从控制器方法返回String值时,spring将解析字符串值 配置视图模板。因此,返回“welcome”会解析resources/templates/目录中的welcome.html。

当您使用返回“Hello from”+ System.getenv(“HOSTNAME”)+ String.format(“%n”)替换它时 它将查找名为“Hello from”+ System.getenv(“HOSTNAME”)+ String.format(“%n”)

的模板

由于resources/templates/内部不存在,因此会出错。

按照以下方式更改您的控制器:

@GetMapping("/") 
public String welcome(Model model) {
    model.addAttribute("hostname", System.getenv("HOSTNAME") );
    return "welcome"; 
} 

并改变你的welcome.html,

<h1>Hello from <span th:text="${hostname}">hostname</span></h1>

答案 1 :(得分:-1)

更新 - 修改问题后

要获得正在运行的计算机的hostname,请尝试以下

import java.net.InetAddress;
import java.net.UnknownHostException;

String hostname;
try {
    InetAddress ia = InetAddress.getLocalHost();
    hostname =  ia.getHostName();
} catch (UnknownHostException e) {
    e.printStackTrace();
}
//assuming your thymeleaf template file called 'welcome'
model.addAttribute("hostname", hostname);
return "welcome"; 

在您的模板文件中

<h1>Hello from <span th:text="${hostname}">hostname</span></h1>