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:

Java Program to Find the Minimum Element of a Rotated Sorted Array using Binary Search approach
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
Recommended Package Structure of a Spring Boot Project
Dockerizing a Spring Boot Application
Hướng dẫn sử dụng Lớp FilePermission trong java
Spring MVC Custom Validation
Java Program to Give an Implementation of the Traditional Chinese Postman Problem
Guide to Java Instrumentation
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Java Program to Perform integer Partition for a Specific Case
Java Program to Implement Euclid GCD Algorithm
Java Program to Implement Tarjan Algorithm
Spring Boot - Creating Docker Image
Transactions with Spring and JPA
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
Spring Boot - Interceptor
Collection trong java
Java Program to Implement Treap
Introduction to Thread Pools in Java
Java – Write an InputStream to a File
Introduction to Spring Boot CLI
A Guide to Apache Commons Collections CollectionUtils
Java Program to Perform Searching in a 2-Dimension K-D Tree
Java Program to Find the GCD and LCM of two Numbers
So sánh Array và ArrayList trong Java
Deploy a Spring Boot WAR into a Tomcat Server
Spring Boot - Enabling Swagger2
Java Program to implement Sparse Vector
Create a Custom Auto-Configuration with Spring Boot
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
Extra Login Fields with Spring Security
Hướng dẫn Java Design Pattern – Memento