I migrated an application from spring-boot 3.3.6 to 3.4.2. We have below code to create a static resource locator:

@Bean
RouterFunction staticResourceLocator() {
  return RouterFunctions.resources("/**", new FileSystemResource("/opt/cfg/static/"));
}

After the migration this code is throwing an exception: Failed to instantiate [org.springframewok.we.reactive.function.server.RouterFunction]: Factory method 'stticResourceLocator' threw exception with message: Resource location does not end with slash: /opt/cfg/static

I found that when FileSystemResource is created there is a call to StringUtils.cleanPath(path) where the last slash is removed from the original path.

is there another way to create the FileSystemResource and preserve the last slash?

Comment From: jhoeller

It's not actually StringUtils.cleanPath itself, it's the getURL().getPath() check that we do for Resource there. Like for ClassPathResource, we should explicitly check the given FileSystemResource.getPath() instead. I've revised this for 6.2.4.

This will be available in the upcoming 6.2.4 snapshot. Feel free to give it an early try!