java - Freemarker 模板未加载

标签 java spring spring-mvc nullpointerexception freemarker

我使用 Spring + Freemarker 作为发送电子邮件的模板,但每次我尝试发送邮件时都会收到消息

freemarker.template.TemplateNotFoundException: Template not found for name "template.ftl".

我的代码如下:

 // Configuration - AppConfig.java
@Bean
public freemarker.template.Configuration freeMarkerConfigurationFactory() throws Exception{
    FreeMarkerConfigurationFactory fmcf = new FreeMarkerConfigurationFactory();
    fmcf.setTemplateLoaderPath("classpath:/META-INF/freemarker/");          
    fmcf.setPreferFileSystemAccess(false);
    fmcf.setDefaultEncoding("UTF-8");        
    return fmcf.createConfiguration();
}

邮件发送服务

    @Override
    @Async
    public void sendActivationMail(User user, HttpServletRequest request, String restorePasswordId) throws MailException, MessagingException, GetDataException {                 
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));             
        mimeMessage.setSubject(SOFTWARE_NAME + " - Activation");
        mimeMessage.setHeader("content-type", "text/html");    
        Map map = new HashMap();
        map.put("link", ServletUtility.getCompleteAdress(request)+"/auth/confirm/"+restorePasswordId);        
        try{
            mimeMessage.setContent(FreeMarkerTemplateUtils.processTemplateIntoString(freeMakerConfiguration.getTemplate("template.ftl"), map),
                    "text/html; charset=utf-8");
        }catch(Exception e){e.printStackTrace();}
        mailSender.send(mimeMessage);        
    }

这是我的目录树:

    src
    -main
    --java
    --- it.navium.secutor
    ----AppConfig.java
    --resources
    --webapp
    ---META-INF
    ----freemarker
    -----template.ftl

最佳答案

执行以下 3 项操作,您就可以开始了:

  1. 将您的 webapp 目录重命名为 WEB-INF
  2. 丢失中间的 META-INF 目录,这意味着您的新树结构将如下所示:
-WEB-INF
--freemarker
---template.ftl
  • 在 FreeMarker Bean 定义中将类路径字符串改为:fmcf.setTemplateLoaderPath("classpath:/freemarker/");
  • 关于java - Freemarker 模板未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845243/

    相关文章:

    java - HystrixCommand 注释导致 ControllerLinkBuilder 中断

    java - 如何修复 NumberFormatException?

    java - POM打包option jar to war改错

    java - Spring Boot 2.1 中热重载 Thymeleaf 模板和资源包

    spring - *.configuration.SecondaryDataSource 中方法 entityManagerFactory 的参数 0 需要找不到类型为 '*.EntityManagerFactoryBuilder' 的 bean

    java - "Dump"运行集成测试时的hql数据库

    spring-mvc - Spring获取Tomcat参数的方法

    java - Android Studio : Early Access Java versions may cause compatibility issues

    java - Jackson:将 JSON 响应映射到多个 bean

    java - Spring Data JPA 原生 @Query,整个实体名为 @Param