@EnableWebFlux批注的功能是什么

时间:2018-08-14 14:03:25

标签: spring spring-boot freemarker spring-webflux

我有一个非常简单的带有freemarker的webflux演示应用程序,该应用程序具有以下文件:

1.WebFluxDemoApplication.java

@SpringBootApplication
public class WebFluxDemoApplication {

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

    @Controller
    class HomeController {
        @GetMapping("/hello")
        public String hello() {
            return "index";
        }
    }
}

2.index.ftl (位于类路径:/ templates下)

<html>
    <head>
        <title>demo</title>
    </head>
    <body></body>
</html>

3.application.yml (无任何配置)

4.pom.xml (带有spring-boot-starter-freemarkerspring-boot-starter-webflux

我可以使用这些文件通过http://localhost:8080/hello来获得正常页面,但是如果我将@EnableWebFlux添加到WebFluxDemoApplication,则会出现错误,显示 java.lang.IllegalStateException: Could not resolve view with name 'index'.

我注意到Spring WebFlux's official guide声明使用@EnableWebFlux来配置freemarker。实际上,它适用于模板文件,但是静态资源似乎有问题。

例如,我将main.js文件放在classpath:/templates/js/下,并在<script src="/js/main.js"></script>中添加index.ftl,然后我得到一个错误,提示 WARN 3046 --- [ctor-http-nio-2] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://localhost:8080/js/main.js]: Response status 404 with reason "No matching handler"

更新 对于静态资源问题,我找到了一种解决方案,该解决方案是添加post所述的RouterFunction来解析静态资源。

1 个答案:

答案 0 :(得分:1)

the Spring Boot reference documentation, @EnableWebFlux will tell Spring Boot that you wish to take full control over the WebFlux configuration中所述,并为此禁用所有自动配置(包括静态资源)。

@EnableWebFlux并没有配置Freemarker,而是实际上设置了整个WebFlux基础结构。对于Spring Boot,只需添加spring-boot-starter-freemarker作为依赖项(并可以选择通过配置属性对其进行配置)。