为小胡子模板引擎配置视图解析器时出错
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
。
所以简而言之,你应该删除一些东西,它就会起作用。在这种情况下事半功倍。
我在 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
。
所以简而言之,你应该删除一些东西,它就会起作用。在这种情况下事半功倍。