Поле templateEngine в MailComponent требует bean-компонент типа 'org.thymeleaf.TemplateEngine', который не может быть найден - PullRequest
0 голосов
/ 04 марта 2020

Я новичок весной Итак, у меня есть проблема, подобная этой: Описание:

Поле templateEngine в com.diet4you.LapkoEkaterina.MailComponent требуется компонент типа 'org.thymeleaf.TemplateEngine', который не может быть найдено.

Точка внедрения имеет следующие аннотации: - @ org.springframework.beans.factory.annotation.Autowired (обязательно = true)

Следующие кандидаты были найдены, но не могут быть введены : - Метод бина 'templateEngine' в 'ThymeleafAutoConfiguration.ThymeleafDefaultConfiguration' не загружен, потому что @ConditionalOnBean (типы: org.thymeleaf.spring5.ISpringTemplateEngine; SearchStrategy: все) обнаружил бины типа 'org.thymeleineTempate.beEmplate.print template.prE 'templateEngine' в 'ThymeleafAutoConfiguration.ThymeleafReactiveConfiguration' не загружен, поскольку не обнаружил реактивные классы веб-приложений

Действие:

Рассмотрите возможность повторного просмотра записей выше или определения компонента типа 'org.thymeleaf.Templa teEngine 'в вашей конфигурации.

MailComponent:

@Component
public class MailComponent {
    @Autowired
    MailSender mailSender;

    @Autowired
    JavaMailSender javaMailSender;

    @Autowired
    TemplateEngine templateEngine;

    public boolean sendSimpleMail(Contact contact) {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setFrom(contact.getEmail());
        mailMessage.setSubject(contact.getSubject());
        mailMessage.setText(contact.getMessage());
        mailMessage.setTo("email@email.com"); // if you use Gmail do not forget to put your personal address

        try {
            mailSender.send(mailMessage);
            return true;
        } catch (MailException e) {
            System.err.println(e.getMessage());
            return false;
        }
    }

    public boolean sendHtmlMail(Contact contact) {

        Context context = new Context();
        context.setVariable("contact", contact);
        final String messageHtml = templateEngine.process("email/contact", context);

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mailMessage = new MimeMessageHelper(mimeMessage);
        try {
            mailMessage.setTo("email@email.com"); // if you use Gmail do not forget to put your personal address
            mailMessage.setFrom(contact.getEmail());
            mailMessage.setSubject(contact.getSubject());
            mailMessage.setText(messageHtml, true);
            javaMailSender.send(mimeMessage);
            return true;
        } catch (MessagingException | MailException e) {
            System.err.println(e.getMessage());
            return false;
        }
    }
}

MailConfig:

@PropertySource(ignoreResourceNotFound = true, value = "classpath:ValidationMessages.properties")
@Configuration
public class MailConfig {

    @Value("${spring.mail.host}")
    private String host;

    @Value("${spring.mail.port}")
    private int port;

    @Value("${spring.mail.default-encoding}")
    private String encoding;

    @Value("${spring.mail.properties.mail.debug}")
    private String debug;

    /**
     * Gmail Config
     */
//    @Value("${spring.mail.username}")
//    private String username;
//    @Value("${spring.mail.password}")
//    private String password;
//    @Value("${spring.mail.properties.mail.smtp.auth}")
//    private String auth;
//    @Value("${spring.mail.properties.mail.smtp.starttls.enable}")
//    private String starttls;

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setDefaultEncoding(encoding);
        mailSender.setHost(host);
        mailSender.setPort(port);

        /**
         * Gmail Config
         */
//        mailSender.setUsername(username);
//        mailSender.setPassword(password);
        Properties properties = new Properties();
//        properties.put("mail.smtp.auth", auth);
//        properties.put("mail.smtp.starttls.enable", starttls);
        properties.put("mail.debug", debug);
        mailSender.setJavaMailProperties(properties);

        return mailSender;
    }





}

ThymeleafConfig:

public class ThymeleafConfig extends WebMvcConfigurerAdapter  {




    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine( templateEngine());
        return viewResolver;
    }

    @Bean
    public ISpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        return templateEngine;
    }

    private ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }
}

Я сделал это из этого примера: https://www.youtube.com/watch?v=KoPWOACk6CA

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Как предложил @Chris.

Посмотрите вокруг application.properties или application.yml file.

Ключ должен быть определен как ниже показан пример

application.properties

spring.mail.default-encoding=UTF-8

application.yml

spring
  mail
    default-encodig: UTF-8
0 голосов
/ 04 марта 2020

Spring жалуется при попытке создать ваш KonsultacjaController, потому что он не может найти bean-компонент, который удовлетворяет зависимости от MailComponent. Из классов, которые вы включили, похоже, что это может быть одна из двух вещей:

  • В вашем весеннем контексте нет экземпляра TemplateEngine. Ваш MailComponent требует его, и если ваш контекст не имеет его, он не сможет создать MailController (и, следовательно, не сможет создать KonsultacjaController).

или

  • Сканирование компонента Spring не находит ваш компонент MailController и, следовательно, он не существует в контексте.

Кстати, JavaMailSender расширяет MailSender, поэтому вам не нужно внедрить оба в MailComponent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...