Я изучаю WebFlux, и я хотел бы знать, как обслуживать статический контент на MicroService с помощью WebFlux, но я не нашел информации, чтобы сделать это.
Как обслуживать статический контент с помощью 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