Spring Boot nos hace la vida muy fácil a la hora de crear aplicaciones web y APIs. Con tan solo crear un objeto ModelAndView el framework ya sabe que tiene que renderizar y devolver el contenido como respuesta a una petición.
Pero a veces, queremos renderizar el contenido manualmente, por ejemplo, porque tiene que ir dentro de un objeto JSON y no devolver un contenido html. De hecho, esto me lo he encontrado en un proyecto hace poco y la solución no fue sencilla de encontrar.
Si queremos renderizar un contenido lo podemos hacer de la forma siguiente:
/* Declaramos el atributo que será injectado por Spring Boot */ @Autowired private TemplateEngine templateEngine; /* Creamos el contexto con las variables que le pasamos a la vista */ Context ctx = new Context(); ctx.setVariable("name", "valor name 1" ); ctx.setVariable("img", "valor img 1" ); String out=templateEngine.process("mi-plantilla", ctx);
El texto comentado es sencillo de entender, básicamente Spring Boot nos injecta un objeto ‘TemplateEngine’ que nos ofrece el método ‘process’ con dos parametros: El primero el nombre de la plantilla a renderizar(Que debe estar en la carpeta templates de la carpeta de recursos con terminación ‘.html’) y el segundo parámetro que es el contexto con las variables que injectamos para renderizar la plantilla.
Sencillo y fácil, cuando se sabe, como todo en el mundillo…