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:

REST Web service: Upload và Download file với Jersey 2.x
Introduction to Using FreeMarker in Spring MVC
Java Program to Find kth Largest Element in a Sequence
Removing all Nulls from a List in Java
Guide to Mustache with Spring Boot
Properties with Spring and Spring Boot
Find the Registered Spring Security Filters
Java Program to Implement Graph Coloring Algorithm
Java Program to Implement Borwein Algorithm
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Exploring the New Spring Cloud Gateway
Java Program to Generate All Possible Subsets with Exactly k Elements in Each Subset
Spring Boot Integration Testing with Embedded MongoDB
Hướng dẫn Java Design Pattern – Factory Method
Creating a Custom Starter with Spring Boot
Serialize Only Fields that meet a Custom Criteria with Jackson
Annotation trong Java 8
Jackson – Change Name of Field
Testing an OAuth Secured API with Spring MVC
Spring Boot - Introduction
Custom Thread Pools In Java 8 Parallel Streams
Java Program to Implement Solovay Strassen Primality Test Algorithm
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Apache Camel with Spring Boot
Java Program to Implement Gauss Jordan Elimination
Java Program to Describe the Representation of Graph using Adjacency List
Spring Boot - Web Socket
Object Type Casting in Java
Java Program to Implement Bresenham Line Algorithm
JWT – Token-based Authentication trong Jersey 2.x
Converting Between a List and a Set in Java