Estoy usando la aplicación Spring Boot de muestra de spring-petclinic para una demostración que estoy construyendo. Estoy tratando de hacer algo que parece súper básico, pero estoy luchando (soy un Java n00b).

Aquí está la aplicación de muestra: https://github.com/spring-projects/spring-petclinic

Básicamente, quiero mostrar el nombre de host del servidor en la página de bienvenida del sitio web.

En el archivo WelcomeController.java (spring-petclinic/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java) tengo lo siguiente:

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

Todo lo que he reemplazado es el valor de retorno de return "welcome" a lo que ves arriba.

La compilación se completa y puedo ejecutar la aplicación, pero la página se carga con el siguiente error:

Something happened...

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

He jugado con model.addAttribute y agregando bloques public String adicionales, ¡pero estoy un poco fuera de mi alcance! ¿Algunas ideas?

0
Joe Gardiner 13 nov. 2017 a las 13:10

2 respuestas

La mejor respuesta

Cuando devuelve un valor de cadena de un método de controlador con @RequestMapping, Spring resolverá el valor de cadena de plantilla de vista configurada. Así que return "welcome" resuelve welcome.html dentro del directorio resources/templates/.

Cuando lo reemplaza con return "Hello from" + System.getenv ("HOSTNAME") + String.format ("% n"), buscará la plantilla con el nombre "Hello from" + System.getenv ("HOSTNAME") + String.format ("% n")

Como esto no está presente dentro de resources/templates/, da error.

Cambie su controlador de esta manera:

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

Y cambie su welcome.html así,

<h1>Hello from <span th:text="${hostname}">hostname</span></h1>
1
Monzurul Haque Shimul 13 nov. 2017 a las 11:49

ACTUALIZAR: después de editar la pregunta

Para obtener hostname de la máquina en ejecución, intente lo siguiente

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

Y en tu archivo de plantilla

<h1>Hello from <span th:text="${hostname}">hostname</span></h1>
-1
Zico 13 nov. 2017 a las 10:43