使用 Spring Boot 和注释配置视图解决方案,找不到带有 URI 错误的 HTTP 请求的映射

2022-09-01 06:28:46

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

我从百里香弹簧靴示例开始,我只想删除百里香,以使用纯html和InternerResourceViewResolver制作一个更简单的mvc应用程序。我有一个问候语.html我想服务,它位于src/main/webapp/WEB-INF。当我运行应用程序时,我得到

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

这是一个常见的错误,网络上有很多答案,但似乎没有什么帮助。

这是我的应用程序.java

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

这是我的问候控制器.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

以下是一些其他线索:

  • 百里香叶视图解析工作正常
  • 内部资源查看解决方案解析到正确的路径
  • WEB-INF和问候语.html似乎存在于战争文件中
  • 我没有jsp或jstl,所以我不会像有些人建议的那样错过那些罐子

我的假设是,调度程序 servlet 以某种方式被配置为在 /* 上服务,而不是像这里和任何地方一样/但是我没有网络.xml所以这些建议在这里不适用。我看到很多如何以编程方式配置调度程序servlet的例子,但我想将我的应用程序保持在最低限度,我怀疑spring boot应该配置它,因为它可以与百里香咖啡一起使用。


答案 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说),并且对于此配置是告诉它将其委托给容器的方法。


答案 2

视图解析器也可以在Spring-Boot Web应用程序的文件中配置,如下所示:application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

推荐