为小胡子模板引擎配置视图解析器时出错

Error while configuring View Resolver for mustache template engine

我在 spring-boot 项目中有以下配置文件:

@Configuration
public class AppConfig {
    @Bean
    public ViewResolver mustacheViewResolver() {
        MustacheViewResolver viewResolver = new MustacheViewResolver();
        viewResolver.setPrefix("/templates/");
        viewResolver.setSuffix(".mustache");
        viewResolver.setOrder(1);
        return viewResolver;
    }

}

当我 运行 我的应用程序时,出现以下错误:
说明:

在 class 路径资源 [org/springframework/boot/autoconfigure/mustache/MustacheServletWebConfiguration.class] 中定义的 bean 'mustacheViewResolver',无法注册。已在 class 路径资源 [com/example/demo/AppConfig.class] 中定义了具有该名称的 bean,并且禁用了覆盖。

操作:

考虑重命名其中一个 bean 或通过设置 spring.main.allow-bean-definition-overriding=true 启用覆盖
我不确定我是否正确配置了视图解析器

删除配置后出错 class:

o.s.w.s.v.ContentNegotiatingViewResolver : Selected '*/*' given [*/*]
o.s.w.servlet.view.InternalResourceView  : View name 'tweets.mustache', model {tweets=null}
o.s.w.servlet.view.InternalResourceView  : Forwarding to [tweets.mustache]
o.s.web.servlet.DispatcherServlet        : "FORWARD" dispatch for GET "/tweets.mustache?email=tim@gmail.com", parameters={masked}
 o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]
 o.s.w.s.r.ResourceHttpRequestHandler     : Resource not found
 o.s.web.servlet.DispatcherServlet        : Exiting from "FORWARD" dispatch, status 404
 o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND
 o.s.web.servlet.DispatcherServlet        : "ERROR" dispatch for GET "/error?email=tim@gmail.com", parameters={masked}
 s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Writing [{timestamp=, status=404, error=Not Found, path=/tweet2}]
o.s.web.servlet.DispatcherServlet        : Exiting from "ERROR" dispatch, status 404



 @GetMapping("/tweet2")
    public ModelAndView getTweetsByEmail(@RequestParam String email) {
        HQLExample.insertRecords();
        ModelAndView modelAndView = new ModelAndView("tweets.mustache");
        List<Tweet> tweets = tweetMap.get(email);
        modelAndView.getModel().put("tweets",tweets);
        return modelAndView;
    }

假设您已将 spring-boot-starter-mustache 添加为依赖项(以轻松包含所有需要的依赖项)。当 Spring Boot 在 class 路径上检测到 Mustache 时,它​​将自动配置 MustacheViewResolver,它将从 class 路径上的 /templates 加载 Mustache 模板。文件应以 .mustache.

结尾

考虑到这一点,只需删除您的 AppConfig class,因为它会干扰自动配置。

在您的控制器中,视图的名称是您拥有的名称,但没有 ViewResolver 添加的 .mustache

所以简而言之,你应该删除一些东西,它就会起作用。在这种情况下事半功倍。