Spring Boot 4 и Thymeleaf web и почта вместе не работают
Я столкнулся с некоторой проблемой при использовании Spring Boot 4 вместе с сетью Thymeleaf вместе с ее почтой.
Если я использую Spring Boot 4 только с веб-сайтом Thymeleaf, он сможет работать без проблем. Проблема начинается, когда я включаю почтовые конфигурации Thymeleaf
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
return viewResolver;
}
@Bean(name ="templateEngine")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(emailTemplateResolver());
return templateEngine;
}
private TemplateResolver emailTemplateResolver() {
TemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("/templates/");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(1);
return templateResolver;
}
Если я пытаюсь собрать и запустить с этим, страница не загружается. Поэтому я обновил код, включая веб-шаблон.
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
return viewResolver;
}
@Bean(name ="templateEngine")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(emailTemplateResolver());
templateEngine.addTemplateResolver(webTemplateResolver());
return templateEngine;
}
private TemplateResolver emailTemplateResolver() {
TemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("/templates/");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(1);
return templateResolver;
}
private TemplateResolver webTemplateResolver() {
TemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/templates/");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(2);
return templateResolver;
}
Это ошибка, которая возвращается при загрузке страницы:
2016-10-14 14:56:57.137 ERROR 3875 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers
Какая конфигурация необходима, чтобы веб-шаблоны и почтовые шаблоны тимелина могли правильно использоваться при весенней загрузке?
Это мои весенние свойства для тимьяна
spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.view-names=index
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false
spring.thymeleaf.check-template=true
1 ответ
Если вы добавили spring-boot-starter-thymeleaf
должен работать без какой-либо конфигурации (spring boot
делает магию для вас)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
В противном случае, если вы ищете configurae, это просто создание компонента TemplateResolver
в классе конфигурации с чем-то вроде, должно работать.
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver() {
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
Затем вы должны добавить свои почтовые шаблоны в src/main/resources/templates
,
Так, например, если вы создаете шаблон с именем mymail.html
Вы должны обработать с bean-компонентом SpringTemplateEngine. Введите его там, где вам это нужно:
@Autowired
public SpringTemplateEngine templateEngine;
А затем обработать почту, добавив имя файла шаблона без .html
расширение и добавить в качестве текста к вашему JavaMailSender
как в следующем примере:
String body = templateEngine.process("mymail", ctx);
javamail.setText(body, true);