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:

Fixing 401s with CORS Preflights and Spring Security
Java Program to Implement Gabow Algorithm
Java Program to Compare Binary and Sequential Search
Hướng dẫn Java Design Pattern – Dependency Injection
Getting Started with Stream Processing with Spring Cloud Data Flow
Java Program to Describe the Representation of Graph using Incidence List
Giới thiệu luồng vào ra (I/O) trong Java
Cachable Static Assets with Spring MVC
Create a Custom Auto-Configuration with Spring Boot
Java Program to Perform Arithmetic Operations on Numbers of Size
The Registration API becomes RESTful
MyBatis with Spring
Jackson JSON Views
Converting Strings to Enums in Java
Java Program to Implement Nth Root Algorithm
Map to String Conversion in Java
Java Program to Compute Discrete Fourier Transform Using Naive Approach
Java Program to Construct a Random Graph by the Method of Random Edge Selection
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Lớp Collectors trong Java 8
JWT – Token-based Authentication trong Jersey 2.x
Exploring the New Spring Cloud Gateway
Spring Security – security none, filters none, access permitAll
Java Program to Implement Double Order Traversal of a Binary Tree
Java Program to Perform the Sorting Using Counting Sort
Mảng (Array) trong Java
Error Handling for REST with Spring
LinkedList trong java
Receive email using POP3
Java Program to Sort an Array of 10 Elements Using Heap Sort Algorithm
Giới thiệu Google Guice – Dependency injection (DI) framework
Object Type Casting in Java