Adding external directory to Spring Boot’s static resources handling

I’ve been using Spring Boot recently, and it’s great. However, some things are not yet intuitive. For instance, mapping an external directory to the default static resources handling.

The only way I know of, currently, is to provide a custom WebMvcConfigurer. Various examples on the Internet and StackOverflow show how to provide an explicit mapping, but I wanted to extend the built-in WebMvcConfigurer instead of replacing it.

I decided to try extending the Spring Boot WebMvcAutoConfigurationAdapter, and that seems to have worked.

@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class})
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@Order(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    String myExternalFilePath = "file:///C:/Temp/whatever/m/";

    registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);

    super.addResourceHandlers(registry);
  }

}

The call to `super.addResourceHandlers` sets up the default handlers.

Also:

  • Note the trailing slash on the external file path. (Depends on your expectation for URL mappings).
  • Consider reviewing the source code of [WebMvcAutoConfigurationAdapter][2]

With this in place, static content from myExternalFilePath is served to the /m path, and the default static URL mappings continue to work as well.

Related StackOverflow Q/A: How do I use Spring Boot to serve static content located in Dropbox folder?

This entry was posted in Technical. Bookmark the permalink.