Wie zu verwenden SpringTemplateEngine bei der Verwendung von Spring Boot
Ich bin mit Thymeleaf SpringTemplateEngine erstellen Sie eine HTML-e-mail auf meinem Spring-Anwendung. Wenn ich rein Spring MVC, alles war perfekt. Jetzt mit Spring Boot-die Klasse kann nicht finden, meine .html-Vorlage. Ich denke, das problem ist mit ServletContext, der nicht wieder für den richtigen Weg, aber ich kann nicht herausfinden, wie es zu lösen. Also sollte ich einen anderen Kontext zu verarbeiten, die Vorlage? Welche?
Dies ist mein MailService arbeiten für pure Spring MVC.
@Service
public class MailService {
private JavaMailSenderImpl mailSender;
private SpringTemplateEngine templateEngine;
public MailService() {
mailSender = new JavaMailSenderImpl();
//mailSender config
templateEngine = new SpringTemplateEngine();
Set<ITemplateResolver> templatesResolvers = new HashSet<ITemplateResolver>();
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("mail/");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
templatesResolvers.add(emailTemplateResolver);
ServletContextTemplateResolver webTemplateResolver = new ServletContextTemplateResolver();
webTemplateResolver.setPrefix("/mail/");
webTemplateResolver.setTemplateMode("HTML5");
webTemplateResolver.setCharacterEncoding("UTF-8");
webTemplateResolver.setOrder(2);
templatesResolvers.add(webTemplateResolver);
templateEngine.setTemplateResolvers(templatesResolvers);
}
public void sendReport(String nome, String email, String obra,
long medicao, HttpServletRequest request,
HttpServletResponse response, ServletContext context, Locale locale)
throws MessagingException {
String subject = "Novo relatório";
final WebContext ctx = new WebContext(request, response, context,
locale);
ctx.setVariable("nome", nome);
ctx.setVariable("obra", obra);
ctx.setVariable("data", DataUtils.getInstance().getDataString(medicao));
ctx.setVariable("logo", "logo.jpg");
final MimeMessage mimeMessage = this.mailSender.createMimeMessage();
final MimeMessageHelper message = new MimeMessageHelper(mimeMessage,
true, "UTF-8");
message.setSubject(subject);
try {
message.setFrom(new InternetAddress(mailSender.getUsername(),
"Sistema"));
} catch (UnsupportedEncodingException e) {
}
message.setTo(email);
final String htmlContent = this.templateEngine.process(
"email-relatorio.html", ctx);
message.setText(htmlContent, true);
try {
File file = new File(context.getRealPath("app/img/logo-pro.jpg"));
InputStreamSource imageSource = new ByteArrayResource(
IOUtils.toByteArray(new FileInputStream(file)));
message.addInline("logo.jpg", imageSource, "image/jpg");
} catch (IOException e) {
e.printStackTrace();
}
this.mailSender.send(mimeMessage);
}
}
Den Fehler:
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "email-relatorio.html", template might not exist or might not be accessible by any of the configured Template Resolvers
at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:246)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:924)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:898)
InformationsquelleAutor rcorreia | 2015-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie mit Spring Boot dann lassen Sie den Frühling Starten tun die Schwerstarbeit, die er bereits tut. Entfernen Sie den Konstruktor und einfach
@Autowire
dieJavaMailSender
undSpringTemplateEngine
.Fügen Sie die E-mail-Konfiguration, um die
application.properties
.Fügen Sie die Thymian-Blatt-Konfiguration zur Anwendung.Eigenschaften
Wenn Sie das getan haben, ändern Sie Ihre Klasse
Vergiss es. Das problem war, weil ich die übergabe der vollständige name der Datei, es wurde aber ein suffix. Bitte ändern "email-relatorio.html" "E-Mail-relatorio" und eine Besetzung von JavaMailSender zu JavaMailSenderImpl, wenn mit der getUsername. Danke!
Sie sollten nicht gegossen oder verwenden Sie den
getUsename
nur injizieren Sie die Eigenschaft mit einem@Value
basiert Eigentum. Finden Sie unter den geänderten code. Der cast könnte problematisch sein aufgrund von AOP zur Verfügung stehen und als solche konnte man Sie nicht gegossen, um dieJavaMailSenderImpl
sondern nur die Schnittstelle. Neben, sollten Sie die Programmierung auf Schnittstellen und nicht auf konkrete Klassen.... Auch diesrc/main/resources/templates
ist der Standard-Speicherort, so dass Sie nicht brauchen, zu konfigurieren.Vielen, vielen Dank!
danke Mann. Solch ein einfaches Konzept.
InformationsquelleAutor M. Deinum