我在使用Spring Boot 4以及Thymeleaf web及其邮件时遇到了一些问题。
如果我单独使用Thymeleaf web的Spring Boot 4,它可以毫无问题地工作。当我包含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;
}
如果我尝试构建并运行此页面,则页面无法加载。所以我已经使用包含Web模板更新了代码。
@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; }
@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
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
答案 0 :(得分:0)
如果您已添加spring-boot-starter-thymeleaf
,则无需任何配置即可正常工作(spring boot
会为您带来魔力)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
否则,如果您正在寻找配置,只需在类似的配置类中创建bean 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
的模板,则应使用SpringTemplateEngine bean进行处理。将其注入您需要的地方:
@Autowired
public SpringTemplateEngine templateEngine;
然后处理邮件,添加文件模板的名称与.html
扩展名并添加为JavaMailSender
的文本,如下一个示例所示:
String body = templateEngine.process("mymail", ctx);
javamail.setText(body, true);