11

I'd like to add a resource folder relative to the location of the jar (in addition to packaged resources within my jar), for example:

/Directory
    Application.jar
    /resources
        test.txt

I've tried the following:

@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**")
            .addResourceLocations("/resources/", "file:/resources/");
}

I've also tried:

.addResourceLocations("/resources/", "file:resources/");

Accessing http://localhost:8080/resources/test.txt with either setup leads to a whitelabel error page. How can I resolve this?

approxiblue
  • 6,982
  • 16
  • 51
  • 59
cscan
  • 3,684
  • 9
  • 45
  • 83

2 Answers2

18

Your second approach would work:

@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**")
            .addResourceLocations("/resources/", "file:resources/");
}

but only if you launched Spring Boot from /Directory, because file:resources/ is a relative path.

cd Directory
java -jar Application.jar

It's nice if you can pack everything into the jar, but if you have to reference external resources, you should use absolute paths to avoid problems like this.

approxiblue
  • 6,982
  • 16
  • 51
  • 59
1
 @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
            .addResourceHandler("/files/**")
            .addResourceLocations("file:/location1/", "file:/location2/");
}

access file using http://localhost:{port}/files/image.png