Как обслуживать статический контент с помощью Webflux?

Я изучаю WebFlux, и я хотел бы знать, как обслуживать статический контент на MicroService с помощью WebFlux, но я не нашел информации, чтобы сделать это.

Ответ 1

Попробуйте это

RouterFunction router = resources("/**", new ClassPathResource("public/"));

Ответ 2

Хуан Медина прав. Я просто хочу сделать это еще более понятным и предоставить ссылку.

Фактически вам просто нужно добавить компонент RouterFunction для обработки статических ресурсов. Вам не нужно реализовывать свою собственную функцию RouterFunction, поскольку RouterFunctions.resources("/**", new ClassPathResource("static/")); дает то, что вы хотите.

Все, что я делаю, это добавляю этот кусок кода:

@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
    return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}

Все нераспознанные запросы попадут в статический маршрутизатор.

Ответ 3

Spring Web Flux и конфигурация общедоступных статических веб-ресурсов

  • Поместите общедоступные статические веб-ресурсы в папку public-web-resources:

    ./src/main/public-web-resources
    
  • настроить Spring Boot 2.0, application.yaml:

    spring.main.web-application-type: "REACTIVE"
    spring.webflux.static-path-pattern: "/app/**"
    spring.resources.static-locations:
      - "classpath:/public-web-resources/"
    
  • настройте maven-resources-plugin, pom.xml:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>src/main/public-web-resources</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                            <outputDirectory>${basedir}/target/classes/public-web-resources</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.0.BUILD-SNAPSHOT</version>
            </plugin>
        </plugins>
    </build>
    

Ответ 4

Спасибо wildloop для меня со следующими свойствами:

spring.webflux.static-path-pattern: "/**"
spring.resources.static-locations: "classpath:/public-web-resources/"

Spring boot добавляет следующую строку журнала:

15:51:43.776 INFO  Adding welcome page: class path resource [public-web-resources/index.html] - WebMvcAutoConfiguration$WelcomePageHandlerMapping.<init> 

И он работает как страница приветствия для http://localhost:port/myapp/

Пожелайте, чтобы был способ вызвать его на /myapp/docs