Перейти к основному содержимому

Статический контент в Spring WebFlux

· 2 мин. чтения

1. Обзор

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

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

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

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

  • /публичный
  • / статический
  • /Ресурсы
  • /META-INF/ресурсы

Все файлы из этих путей обслуживаются по пути /[resource-file-name] .

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

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

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

Обратите внимание, что это не будет работать при наличии аннотации @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>

Затем нам просто нужно установить свойство статического местоположения:

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

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

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

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

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