InternalResourceViewResolver无法正确解析视图

时间:2018-11-08 20:34:01

标签: spring spring-mvc spring-boot

我不知道我们在这里做错了什么。我正在尝试建立一个单页Spring MVC项目,以便我研究一下。我正在尝试加载一个屏幕,greeting.html。这是我要加载它的控制器类:

@Controller
public class GreetingController {

    @GetMapping("/greeting")
    public String getGreeeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);

        return "greeting";
    }

}

greeting.html位于/resources/templates/greeeting.html中时,此方法工作正常。但是,我想要在WEB-INF文件夹后面。我尝试将其放在WEB-INF/views/greeting.htmlwebapp/WEB-INF/views/greeting.html中。然后,我尝试使用在线阅读的InternalResourceViewResolver

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".html");

    return viewResolver;
}

据我了解,这应该允许它在我的WEB-INF文件夹设置之一的后面找到greeting.html。但是,当我转到localhost:8080/greeting时,控制台中会显示404和以下消息:

WARN 1439 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/views/greeting.html]

我完全不知道发生了什么或如何修复它,每一个在线教程都可以做到这一点,而且没有问题,我似乎找不到任何人遇到同样的问题。任何指导都将对您有所帮助。

4 个答案:

答案 0 :(得分:2)

嗨,据我所知,您正在使用Spring Boot 默认情况下,Spring Boot搜索src / main / resources / templates文件夹 如果您使用了类似的依赖项:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency>

这将默认启用百里香。

要覆盖您的ViewResolver,您需要

在春季启动中,您可以在application.properties文件中进行以下配置:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.html

或者您可以使用java config编写自定义解析器配置:

@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        registry.viewResolver(resolver);
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }  
 }

我认为这很有帮助

答案 1 :(得分:2)

尝试通过扩展WebMvcConfigurerAdapter更改视图解析器。

@Configuration
@ComponentScan(basePackages="...package name...")
@EnableWebMvc

public class MvcConfiguration extends WebMvcConfigurerAdapter{

  @Bean
  public InternalResourceViewResolver viewResolver() {

     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
     viewResolver.setPrefix("/WEB-INF/views/");
     viewResolver.setSuffix(".html");

   return viewResolver;
}

}

答案 2 :(得分:0)

我尝试了所有解决方案,但使用Spring Boot 2 *却出现404错误。 对我来说,使用命令“ mvn clean spring-boot:run”运行应用程序可以修复错误

答案 3 :(得分:0)

尝试从 tomcat-embed-jasper 依赖项的作用域标记中删除提供的或添加 $ {tomcat-embed-jasper.scope} 。这对我有帮助。