MailComponent 中的字段模板引擎需要类型为"org.thymeleaf.TemplateEngine"的 Bean,但找不到



我在春天是新来的,所以,我遇到了这样的问题:描述:

com.diet4you.LapkoEkaterina.MailComponent中的字段templateEngine需要一个类型为"org.thymelaf.templateEngine"的bean,但找不到。

注入点具有以下注释:-@org.springframework.beans.factory.annotation.Autowired(required=true(

已找到以下候选者,但无法注入:-"ThymelafAutoConfiguration.ThymeleafDefaultConfiguration"中的Bean方法"templateEngine"未加载,因为@ConditionalOnBean(类型:org.thmeleaf.spring5.ISpringTemplateEngine;SearchStrategy:all(找到了"org.thymelaf.spring5.ISpringTemplate Engine"templateEngine类型的Bean-"ThymelafAutoConfiguration.ThymeleafReactiveConfiguration"中的Bean方法"templateEngine"未加载,因为未找到响应式web应用程序类

行动:

考虑重新访问上面的条目,或者在配置中定义类型为"org.thymelaf.TemplateEngine"的bean。

邮件组件:

@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;
}
}
}

邮件配置:

@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;
}


}

胸腺配置:

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

Spring在试图构造KonsultacjaController时抱怨,因为它找不到满足对MailComponent依赖的bean。从你包含的类来看,它可能是两件事之一:

  • 您的spring上下文没有TemplateEngine实例。您的MailComponent需要一个,如果上下文没有,它将无法构造MailController(因此也无法构造KonsultacjaController(

  • Spring组件扫描没有找到您的MailController组件,因此它不存在于上下文中

顺便说一句,JavaMailSender扩展了MailSender,因此不需要将两者都注入MailComponent。

正如@Chris所建议的。

查看application.propertiesapplications.yml文件。

必须按照下面的示例定义密钥

应用程序属性

spring.mail.default-encoding=UTF-8

application.yml

spring
mail
default-encodig: UTF-8

相关内容

最新更新