Выполняю настройку для шаблонизации писем. столкнулся с такой проблемой.
Объявляю бин.
@Bean
public TemplateResolver mailTemplateResolver() {
TemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix(MAIL);
templateResolver.setSuffix(".html");
templateResolver.setOrder(1);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public TemplateResolver webTemplateResolver() {
TemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix(VIEWS);
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(2);
templateResolver.setTemplateMode("HTML5");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(mailTemplateResolver());
templateEngine.addTemplateResolver(webTemplateResolver());
templateEngine.addDialect(new SpringSecurityDialect());
return templateEngine;
}
@Bean
public AjaxThymeleafViewResolver viewResolver() {
AjaxThymeleafViewResolver thymeleafViewResolver = new AjaxThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setViewClass(FlowAjaxThymeleafView.class);
thymeleafViewResolver.setCharacterEncoding("UTF-8");
thymeleafViewResolver.setContentType("text/html; charset=UTF-8");
return thymeleafViewResolver;
}
Вроде бы ничего не предвещает беды. Оба бина объявлены последовательно. mail - первый, setOrder у mailResolver'a - первый. Добавляется он в сет резолверов - первый. Но когда я пытаюсь вызвать
final Context ctx = new Context(LocaleContextHolder.getLocale());
ctx.setVariable("name", "name");
ctx.setVariable("subscriptionDate", LocalDate.now());
ctx.setVariable("hobbies", Arrays.asList("Cinema", "Sports", "Music"));
final String htmlContent = templateEngine.process("welcomeEmail", ctx);
Он подставляет именно ServletContextTemplateResolver. И соответственно, совершенно заслуженно выдает мне
org.thymeleaf.exceptions.TemplateProcessingException: Resource resolution by ServletContext with org.thymeleaf.resourceresolver.ServletContextResourceResolver can only be performed when context implements org.thymeleaf.context.IWebContext [current context: org.thymeleaf.context.Context]
Как быть и как правильно настроить эту шайтанскую машину?