一尘不染

使用Spring Boot和View注解配置ViewResolver并没有为带有URI错误的HTTP请求找到映射

java

我正在尝试使用最简单的视图解析器和html创建gradle,spring boot和spring mvc的“ hello world”应用程序。

我从thymeleaf春季启动示例开始,我只是想删除thymeleaf,以使用纯html和InternalResourceViewResolver创建一个更简单的mvc应用程序。我要提供一个单独的greeting.html文件,它位于src
/ main / webapp / WEB-INF。当我运行应用程序时,我得到

No mapping found for HTTP request with URI [/WEB-INF/greeting.html] in DispatcherServlet with name 'dispatcherServlet'

这是一个常见的错误,网络上有很多答案,但似乎无济于事。

这是我的Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这是我的GreetingController.java

@Controller
public class GreetingController {
    @RequestMapping("/greeting")
    public String greeting() {
        return "greeting";
    }
}

这是我的MvcConfiguration.java

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".html");
        return resolver;
    }
}

我用 gradle bootRun

这是带有代码的仓库:https :
//github.com/driver-pete/spring-mvc-example

以下是一些线索:

  • Thymeleaf视图解析效果很好
  • InternalResourceViewResolver解析为正确的路径
  • 战争档案中似乎存在WEB-INF和greeting.html
  • 我没有jsp或jstl,所以我不会像某些人建议的那样错过那些罐子

我的假设是,调度程序servlet以某种方式配置为在/
*上使用,而不是像在这里和其他地方那样
/上使用。但是我没有web.xml,所以这些建议在这里不适用。我看到很多示例,这些人如何以编程方式配置调度程序servlet,但我想使我的应用程序最少,并且我怀疑spring
boot应该可以正常配置它,因为它可以与thymeleaf正常工作。


阅读 261

收藏
2020-09-09

共1个答案

一尘不染

您只需要启用默认的servlet,这是通过将以下内容添加到您的MvcConfiguration

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".html");
        return resolver;
    }

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

从本质上讲,发生的事情是Spring不知道如何原生地处理此类内容(可以说是jsp),而这种配置就是告诉它将其委派给容器的方式。

2020-09-09