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);
Другие вопросы по тегам