java - 如何强制我的模板解析器对/mail/* 模板使用 ClassLoaderTemplateResolver

标签 java spring-mvc spring-boot thymeleaf

我正在为我的 Spring Boot 应用程序 ServletContextTemplateResolver 和 ClassLoaderTemplateResolver 使用两个模板解析器。

我正在将 ServletContextTemplateResolver 用于我的网页的/WEB-INF/* html 模板。另一方面,我将使用 ClassLoaderTemplateResolver 作为我的/mail/html 模板。代码如下:

@Bean(name ="templateResolver") 
public ServletContextTemplateResolver getTemplateResolver() {
    ServletContextTemplateResolver templateResolver = new 
    ServletContextTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/templates/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode("XHTML");
    templateResolver.setOrder(Integer.valueOf(1));
    return templateResolver;
}

@Bean(name ="emailTemplateResolver")    
public ClassLoaderTemplateResolver getEmailTemplateResolver() {
    ClassLoaderTemplateResolver templateResolver = new 
    ClassLoaderTemplateResolver();
    templateResolver.setOrder(Integer.valueOf(2));
    templateResolver.setPrefix("/mail/");
    templateResolver.setSuffix(".html");
    return templateResolver;
}

调用邮件模板时出现以下错误:

Resource resolution by ServletContext with org.thymeleaf.resourceresolver.ServletContextResourceResolver can only be performed when context implements org.thymeleaf.context.IWebContext [current context: org.thymeleaf.context.Context]

如何强制它对/mail/* 模板使用 ClassLoaderTemplateResolver?

最佳答案

您可能正在渲染一个 html 文件,并希望将生成的 html 文件保存在一个字符串变量中,稍后您将使用它通过 html 到 pdf 转换来发送电子邮件。因此,以下代码将在 Spring boot 中为您提供帮助:

@Controller
public class jataController {

    @Autowired
    private TemplateEngine templateEngine;

    @GetMapping(value = "/manual-thym")
    @ResponseBody
    public void justSample() {
        Context context = new Context();
        String filename = "templates/view/generated-ticket.html";
        String html = renderHtml(filename, context);
        System.out.println("template\n" + html);
    }

    private String renderHtml(String filename, Context context) {

        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCacheable(false);
        templateResolver.setOrder(1);
        templateResolver.setCharacterEncoding("UTF-8");

        templateEngine.setTemplateResolver(templateResolver);

        String html = templateEngine.process(filename, context);

        return html;
    }
}

关于java - 如何强制我的模板解析器对/mail/* 模板使用 ClassLoaderTemplateResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43994172/

相关文章:

spring-boot - @EnableWebFlux 注解有什么用?

java - ArcGIS GeoEvent 处理器 - javax.xml.ws.soap.SOAPFaultException : Unmarshalling Error

java - 使用startActivity()时出现运行时错误

Spring REST 使用 Jackson - 400 错误请求日志记录

java - 当我的简单 REST 获取失败时,如何以 JSON 文本返回错误消息?

java - 使用 JPA 规范过滤优化聚合值选择

java - hibernate/MySQL : Hangs after SQL exception

java - 无法在 SolrCloud 中使用 CloudSolrServer 提交文档

java - Spring中 Controller 方法之前的 session 检查

java - 无法从命令提示符运行 Spring Boot 应用程序