«1. Обзор

Иногда нам приходится обслуживать статический контент в наших веб-приложениях. Это может быть изображение, HTML, CSS или файл JavaScript.

В этом руководстве мы покажем, как обслуживать статический контент с помощью Spring WebFlux. Мы также предполагаем, что наше веб-приложение будет настроено с использованием Spring Boot.

2. Переопределение конфигурации по умолчанию

По умолчанию Spring Boot обслуживает статический контент из следующих расположений:

    /public /static /resources /META-INF/resources

Обслуживаются все файлы из этих путей по пути /[имя-файла-ресурса].

Если мы хотим изменить путь по умолчанию для Spring WebFlux, нам нужно добавить это свойство в наш файл application.properties:

spring.webflux.static-path-pattern=/assets/**

Теперь статические ресурсы будут расположены в /assets/[resource-file -название].

Обратите внимание, что это не будет работать при наличии аннотации @EnableWebFlux.

3. Пример маршрутизации

Можно также обслуживать статический контент с помощью механизма маршрутизации WebFlux.

Давайте рассмотрим пример определения маршрутизации для обслуживания файла index.html:

@Bean
public RouterFunction<ServerResponse> htmlRouter(
  @Value("classpath:/public/index.html") Resource html) {
    return route(GET("/"), request
      -> ok().contentType(MediaType.TEXT_HTML).syncBody(html)
    );
}

С помощью RouterFunction мы также можем обслуживать статический контент из пользовательских расположений.

Давайте посмотрим, как обслуживать изображения из каталога src/main/resources/img, используя путь /img/**:

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

4. Пример пользовательского пути к веб-ресурсам

Еще один способ обслуживать статические ресурсы хранится в пользовательских местах вместо пути src/main/resources по умолчанию, заключается в использовании плагина maven-resources-plugin и дополнительного свойства Spring WebFlux.

Сначала добавим плагин в наш pom.xml:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <resources>
                    <resource>
                        <directory>src/main/assets</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
                <outputDirectory>${basedir}/target/classes/assets</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

Затем нам просто нужно установить свойство staticlocations:

spring.resources.static-locations=classpath:/assets/

После этих действий index.html будет доступен по URL-адресу http://localhost:8080/index.html.

5. Заключение

В этой статье мы узнали, как обслуживать статический контент в Spring WebFlux.

Как всегда, представленный пример кода доступен на GitHub.