diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceHandlerUtils.java b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceHandlerUtils.java index 019ffa5a448..667911a3223 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceHandlerUtils.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceHandlerUtils.java @@ -24,7 +24,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.PathResource; +import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.core.log.LogFormatUtils; @@ -57,15 +57,18 @@ public abstract class ResourceHandlerUtils { Assert.notNull(location, "Resource location must not be null"); try { String path; - if (location instanceof PathResource) { + if (location instanceof org.springframework.core.io.PathResource) { return; } - else if (location instanceof UrlResource) { - path = location.getURL().toExternalForm(); + else if (location instanceof FileSystemResource fileSystemResource) { + path = fileSystemResource.getPath(); } else if (location instanceof ClassPathResource classPathResource) { path = classPathResource.getPath(); } + else if (location instanceof UrlResource) { + path = location.getURL().toExternalForm(); + } else { path = location.getURL().getPath(); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/PathResourceLookupFunctionTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/PathResourceLookupFunctionTests.java index b28db67d280..08bf35bdcdf 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/PathResourceLookupFunctionTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/PathResourceLookupFunctionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.web.testfixture.http.server.reactive.MockServerHttpRequest; import org.springframework.web.testfixture.server.MockServerWebExchange; @@ -39,8 +40,7 @@ class PathResourceLookupFunctionTests { void normal() throws Exception { ClassPathResource location = new ClassPathResource("org/springframework/web/reactive/function/server/"); - PathResourceLookupFunction - function = new PathResourceLookupFunction("/resources/**", location); + PathResourceLookupFunction function = new PathResourceLookupFunction("/resources/**", location); MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://localhost/resources/response.txt").build(); ServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList()); Mono result = function.apply(request); @@ -124,4 +124,17 @@ class PathResourceLookupFunctionTests { .verify(); } + @Test + @SuppressWarnings("removal") + void withPathResource() { + org.springframework.core.io.PathResource location = new org.springframework.core.io.PathResource("/static/"); + PathResourceLookupFunction function = new PathResourceLookupFunction("/resources/**", location); + } + + @Test + void withFileSystemResource() { + FileSystemResource location = new FileSystemResource("/static/"); + PathResourceLookupFunction function = new PathResourceLookupFunction("/resources/**", location); + } + } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHandlerUtils.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHandlerUtils.java index a2effd42569..6e1f986cd74 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHandlerUtils.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHandlerUtils.java @@ -24,7 +24,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.PathResource; +import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.core.log.LogFormatUtils; @@ -58,15 +58,18 @@ public abstract class ResourceHandlerUtils { Assert.notNull(location, "Resource location must not be null"); try { String path; - if (location instanceof PathResource) { + if (location instanceof org.springframework.core.io.PathResource) { return; } - else if (location instanceof UrlResource) { - path = location.getURL().toExternalForm(); + else if (location instanceof FileSystemResource fileSystemResource) { + path = fileSystemResource.getPath(); } else if (location instanceof ClassPathResource classPathResource) { path = classPathResource.getPath(); } + else if (location instanceof UrlResource) { + path = location.getURL().toExternalForm(); + } else { path = location.getURL().getPath(); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/PathResourceLookupFunctionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/PathResourceLookupFunctionTests.java index 33ad38b0ba7..582ae35295c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/PathResourceLookupFunctionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/PathResourceLookupFunctionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import java.util.function.Function; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.web.servlet.handler.PathPatternsTestUtils; @@ -102,4 +103,17 @@ class PathResourceLookupFunctionTests { Collections.emptyList()); } + @Test + @SuppressWarnings("removal") + void withPathResource() { + org.springframework.core.io.PathResource location = new org.springframework.core.io.PathResource("/static/"); + PathResourceLookupFunction function = new PathResourceLookupFunction("/resources/**", location); + } + + @Test + void withFileSystemResource() { + FileSystemResource location = new FileSystemResource("/static/"); + PathResourceLookupFunction function = new PathResourceLookupFunction("/resources/**", location); + } + }