spring - mkyong - ¿Cómo leer los archivos de plantillas de Freemarker desde la carpeta src/main/resources?
spring 5 freemarker (2)
¿Cómo acceder a los archivos de mi plantilla de freemarker (* .ftl) almacenados en mi carpeta src / main / resources desde mi código (aplicación Spring Boot)?
Probé lo siguiente
freemarker.template.Configuration config = new Configuration();
configuration.setClassForTemplateLoading(this.getClass(), "/resources/templates/");
y obteniendo la siguiente excepción
freemarker.template.TemplateNotFoundException: Template not found for name "my-template.ftl".
La raíz de la ruta de clase es src/main/resources
, cambie la ruta a
configuration.setClassForTemplateLoading(this.getClass(), "/templates/");
Me enfrentaba al problema "freemarker.template.TemplateNotFoundException: no se encontró la plantilla para el nombre ...". Mi código era correcto, pero olvidé incluir el directorio / templates / en pom.xml. Así que debajo del código solucioné el problema para mí. Espero que esto ayude.
AppConfig.java :
@Bean(name="freemarkerConfiguration")
public freemarker.template.Configuration getFreeMarkerConfiguration() {
freemarker.template.Configuration config = new freemarker.template.Configuration(freemarker.template.Configuration.getVersion());
config.setClassForTemplateLoading(this.getClass(), "/templates/");
return config;
}
EmailSenderServiceImpl.java:
@Service("emailService")
public class EmailSenderServiceImpl implements EmailSenderService
{
@Autowired
private Configuration freemarkerConfiguration;
public String geFreeMarkerTemplateContent(Map<String, Object> dataModel, String templateName)
{
StringBuffer content = new StringBuffer();
try {
content.append(FreeMarkerTemplateUtils.processTemplateIntoString(freemarkerConfiguration.getTemplate(templateName), dataModel));
return content.toString();
}
catch(Exception exception) {
logger.error("Exception occured while processing freeMarker template: {} ", exception.getMessage(), exception);
}
return "";
}
}
pom.xml :
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>templates/*.ftl</include>
</includes>
</resource>
<resource>
<directory>src/main/</directory>
<includes>
<include>templates/*.ftl</include>
</includes>
</resource>
</resources>
</build>