当前位置: 首页 > 知识库问答 >
问题:

带Spring Boot 2的Thymeleaf 3,无法处理模板

燕宜修
2023-03-14

在阅读之前,请注意,我对Thymeleaf、Spring和Mockito是新的。所以我希望我会犯一些业余错误。

我正在编写代码发送电子邮件使用thymeleaf HTML模板。我一直在网上看不同的教程,并尝试设置一切。我认为我的设置很好,但是当我编写一个测试来检查模板是否正在被处理时,我得到的是“null”而不是某种形式的字符串。

    @Configuration
    public class SpringMailConfig{
...
    @Bean
        public SpringTemplateEngine springTemplateEngine(){
            SpringTemplateEngine templateEngine = new SpringTemplateEngine();
            templateEngine.addTemplateResolver(htmlTemplateResolver());
            templateEngine.setTemplateEngineMessageSource(emailMessageSource());
            return templateEngine;
        }

        @Bean
        public SpringResourceTemplateResolver htmlTemplateResolver() {
            SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
            templateResolver.setPrefix("/templates/");
            templateResolver.setSuffix(".html");
            templateResolver.setTemplateMode(TemplateMode.HTML);
            templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
            return templateResolver;
        }
...
    }
@Component
public class EmailServiceHelper {

    @Autowired
    public SpringTemplateEngine springTemplateEngine;

   private  Context prepareContext(Locale locale, Map<String, Object> contextMap){
        final Context context = new Context(locale);
        context.setVariables(contextMap);
        return context;
    }

    //returns as a string the template with the custom values inserted
    private String returnHtmlContent(String templatePath, Locale locale, Map<String,Object> map){
        Context ctx = prepareContext(locale, map);
        return springTemplateEngine.process(templatePath, ctx);
    }

}

这是一个测试类(它的一部分),我在其中得到错误,SpringTemplateEngine.Process(templatePath,ctx)返回NULL。

@RunWith(MockitoJUnitRunner.class )
public class EmailServiceHelperTest {
@Mock
    SpringTemplateEngine springTemplateEngine;

    @Mock
    SpringResourceTemplateResolver springResourceTemplateResolver;
@InjectMocks
EmailServiceHelper helper;

   @Before
    public void setup(){

        MockitoAnnotations.initMocks(this);
        helper = new EmailServiceHelper();
        helper.springTemplateEngine = springTemplateEngine;
    helper.springTemplateEngine.setTemplateResolver(springResourceTemplateResolver);
    }

@Test
    public void testTemplateMessageHasContent(){
        try {
            Locale locale = new Locale("en");
            Map<String, Object> contextMap = new HashMap<>();
            contextMap.put("name", "Test name");
            MimeMessage message = helper.prepareMimeMessage(mail, mailSender, contextMap, "email", locale);
            assertNotNull(message.getContent());
        }catch (MessagingException | IOException e){
            e.printStackTrace();
            fail("Testing if template message has content failed!");
        }
    }
}

这就是我的电子邮件模板看起来的样子。

<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>TEMPLATE</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<h1 th:text="${name}">Hello, Static Person!</h1>

</body>
</html>

共有1个答案

景嘉实
2023-03-14

我想出来了。正如我怀疑的那样,这是我的一个新手错误。因为我在嘲笑模板引擎,所以我必须在测试中创建处理模板的方法。然后我做了:

when(mockObject.processTemplate()).thenReturn(localProcessTemplateMethod();
 类似资料:
  • 我遵循这个链接的第二个答案(两个步骤)来实现视频到Youtube的上传:使用curl和api v3在Youtube上上传视频 代码工作正常,但当我执行时,我得到的响应是:状态:嵌入:true license:“YouTube”privacystatus:“unlisted”publicstatsviewable:true uploadstatus:“uploaded”

  • 我尝试使用Java buildIn DateTimeFormatter将Datestring格式化为OffsetDateTime。我的DateTimeFormatter无法按预期工作。 字符串是:“2018-11-12T14:55:17 0100” 我期望,与DateTimeFormater我将得到一个适当的OffsetDateTime。可以帮助我摆脱这种情况吗?

  • 我正在尝试使用制作多模块项目。您可以通过链接查看我的代码。在分支是工作解决方案,其中所有匕首类都在模块中。 现在,我正在尝试为DI根创建单独的< code>app模块。您可以在< code>develop分支中看到最新的尝试。它不起作用。我想在< code>app模块中创建我的根< code > application component 组件,并从其他模块添加< code > presentat

  • 什么是模板 你一定听说过一种叫做MVC的设计模式,Model处理数据,View展现结果,Controller控制用户的请求,至于View层的处理,在很多动态语言里面都是通过在静态HTML中插入动态语言生成的数据,例如JSP中通过插入<%=....=%>,PHP中通过插入<?php.....?>来实现的。 通过下面这个图可以说明模板的机制 图7.1 模板机制图 Web应用反馈给客户端的信息中的大部分

  • 问题内容: 下面是测试程序,包括一个汉字: 以下是结果,请看json.dumps将utf-8转换为原始数字! 为什么这坏了?还是我错了? 问题答案: 您应该阅读json.org。完整的JSON规范在右侧的白框中。 生成的JSON没有错。允许生成器生成UTF-8字符串或纯ASCII字符串,在这些字符串中使用符号转义字符。在您的情况下,Python 模块决定转义,并使用转义符号。 顺便说一句:任何符合