SpringResourceTemplateResolver 和 ClassLoaderTemplateResolver 有什么区别?

Ars*_*Ars 5 spring spring-mvc thymeleaf spring-boot

我正在尝试配置我的项目。我有两个 tempalteResolver 变体。如果我用这个:

 @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCacheable(true);
        return templateResolver;
    }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,即使我添加 xmlns:th="http://www.thymeleaf.org",我的模板也无法解析 thymeleaf 语法

当我使用以下代码时:

  @Bean
    public ClassLoaderTemplateResolver templateResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCacheable(false);
        templateResolver.setCharacterEncoding("UTF-8");
        return templateResolver;
    }
Run Code Online (Sandbox Code Playgroud)

我收到错误消息,该路径 (/WEB-INF/templates) 下没有模板。

我的模板的完整路径是 src\main\webapp\WEB-INF\templates\

最好使用的模板解析器是什么?为什么?

谢谢!

Ars*_*Ars 5

对于 Web 项目(使用 SpringMvc 控制器),您应该使用 SpringResourceTemplateResolver,对于命令行项目,或者当您需要为非 Web 应用程序生成 html(例如发送 html 电子邮件或类似内容)时,应该使用 ClassLoaderTemplateResolver。

发生第一个错误是因为 spring security 不知何故没有连接到项目和我的

 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
modelAndView.addObject("auth", auth);
Run Code Online (Sandbox Code Playgroud)

发送空值。第二个错误我不知道为什么会发生。