How to serve static content using Webflux?
Spring Web Flux & public static web resources configuration
put public static web resources into the
public-web-resources
folder:./src/main/public-web-resources
configure 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/"
configure 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>
Juan Medina is right. I just want to make it even more clear and provide a reference link.
In fact, you just have to add a RouterFunction bean to handle static resources. You don't have to implement your own RouterFunction because
RouterFunctions.resources("/**", new ClassPathResource("static/"));
gives what you want.
All I do is to add this piece of code:
@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}
Whatever unrecoginized requests will fall into the static router.
Try this
RouterFunction router = resources("/**", new ClassPathResource("public/"));
UPDATE: Don't forget to specify a name of the static file in the URL when accessing it from outside, like localhost:8080/index.html