Skip to content

Instantly share code, notes, and snippets.

@circlee
Created July 3, 2017 06:48
Show Gist options
  • Save circlee/329a18e6c1bd4077b7ad450f343315f7 to your computer and use it in GitHub Desktop.
Save circlee/329a18e6c1bd4077b7ad450f343315f7 to your computer and use it in GitHub Desktop.
Thymeleaf TemplateEngine component
import java.io.IOException;
import java.io.InputStream;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.TemplateProcessingParameters;
import org.thymeleaf.resourceresolver.IResourceResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
import org.thymeleaf.util.Validate;
import lombok.extern.slf4j.Slf4j;
@Component
public @Slf4j class CoreConfig {
@Bean
public TemplateEngine getThymeleafTemplateEngind(ApplicationContext context){
// thymeleaf-spring4 dependency 설정 시 , viewResolver에 영향
// IResourceResolver만 SpringResourceResolver참고하여 생성
IResourceResolver resourceResolver = new IResourceResolver() {
@Override
public InputStream getResourceAsStream(
TemplateProcessingParameters templateProcessingParameters,
String resourceName) {
Validate.notNull(resourceName, "Resource name cannot be null");
Validate.notNull(context,
"ApplicationContext has not been initialized in resource resolver. TemplateResolver or " +
"ResourceResolver might not have been correctly configured by the Spring Application Context.");
try {
final Resource resource = context.getResource(resourceName);
if (resource == null) {
return null;
}
return resource.getInputStream();
} catch (final IOException e) {
if (log.isDebugEnabled()) {
if (log.isTraceEnabled()) {
log.trace(
String.format(
"[THYMELEAF][%s][%s] Resource \"%s\" could not be resolved. This can be normal as " +
"maybe this resource is not intended to be resolved by this resolver. " +
"Exception is provided for tracing purposes: ",
TemplateEngine.threadIndex(), templateProcessingParameters.getTemplateName(),
resourceName),
e);
} else {
log.debug(
String.format(
"[THYMELEAF][%s][%s] Resource \"%s\" could not be resolved. This can be normal as " +
"maybe this resource is not intended to be resolved by this resolver. " +
"Exception message is provided: %s: %s",
TemplateEngine.threadIndex(), templateProcessingParameters.getTemplateName(),
resourceName, e.getClass().getName(), e.getMessage()));
}
}
return null;
}
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "CoreConfig IResourceResolver Impl";
}
};
TemplateResolver templateResolver = new TemplateResolver();
templateResolver.setResourceResolver(resourceResolver);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setPrefix("classpath:/templates/");
templateResolver.setSuffix(".html");
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(templateResolver);
return engine;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment