Static Content in Spring WebFlux

1. Overview

Sometimes, we have to serve static content in our web applications. It might be an image, HTML, CSS, or a JavaScript file.

In this tutorial, we’ll show how to serve static content using Spring WebFlux. We also assume that our web application will be configured using Spring Boot.

2. Overriding the Default Configuration

By default, Spring Boot serves static content from the following locations:

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

All files from these paths are served under the /[resource-file-name] path.

If we want to change the default path for Spring WebFlux, we need to add this property to our application.properties file:

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

Now, the static resources will be located under /assets/[resource-file-name].

Please note that this won’t work when the @EnableWebFlux annotation is present.

3. Routing Example

It’s also possible to serve static content using the WebFlux routing mechanism.

Let’s look at an example of a routing definition to serve the index.html file:

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

We can also serve static content from custom locations with the help of RouterFunction.

Let’s see how to serve images from the src/main/resources/img directory using the /img/** path:

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

4. Custom Web Resources Path Example

Another way to serve static assets stored in custom locations, instead of the default src/main/resources path, is to use the maven-resources-plugin and an additional Spring WebFlux property.

First, let’s add the plugin to our 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>

Then, we simply need to set the static locations property:

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

After these actions, the index.html will be available under the http://localhost:8080/index.html URL.

5. Conclusion

In this article, we learned how to serve static content in Spring WebFlux.

As always, the sample code presented is available over on GitHub.

Related posts:

Spring Security Authentication Provider
Java Program to find the maximum subarray sum using Binary Search approach
Java Program to Perform Deletion in a BST
Java Program to Find Minimum Element in an Array using Linear Search
Array to String Conversions
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
The DAO with JPA and Spring
A Guide to @RepeatedTest in Junit 5
Java – InputStream to Reader
Creating a Generic Array in Java
Setting a Request Timeout for a Spring REST API
Binary Numbers in Java
Inheritance with Jackson
Java Program to Implement Gauss Jordan Elimination
Tiêu chuẩn coding trong Java (Coding Standards)
Copy a List to Another List in Java
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Phương thức tham chiếu trong Java 8 – Method References
Supplier trong Java 8
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
So sánh ArrayList và LinkedList trong Java
Interface trong Java 8 – Default method và Static method
Spring Security Remember Me
How to Read HTTP Headers in Spring REST Controllers
Rest Web service: Filter và Interceptor với Jersey 2.x (P1)
Java Program to Represent Graph Using Incidence List
Java Switch Statement
Java Program to subtract two large numbers using Linked Lists
Java Program to Find Strongly Connected Components in Graphs
A Quick Guide to Spring Cloud Consul
Redirect to Different Pages after Login with Spring Security
Java Program to Give an Implementation of the Traditional Chinese Postman Problem