diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/EncodedResource.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/EncodedResource.java deleted file mode 100644 index 20a603bc3069a7f4bdb0f97490f2e20ebee7fac8..0000000000000000000000000000000000000000 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/EncodedResource.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2002-2015 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.resource; - -import org.springframework.core.io.Resource; - -/** - * Interface for a resource descriptor that describes the encoding - * applied to the entire resource content. - * - *

This information is required if the client consuming that resource - * needs additional decoding capabilities to retrieve the resource's content. - * - * @author Rossen Stoyanchev - * @since 5.0 - * @see - * HTTP/1.1: Semantics and Content, section 3.1.2.2 - */ -public interface EncodedResource extends Resource { - - /** - * The content coding value, as defined in the IANA registry - * @return the content encoding - * @see HTTP/1.1: Semantics - * and Content, section 3.1.2.1 - */ - String getContentEncoding(); - -} diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java index cc1f2218c682118459fc9526de0a850fa31d01aa..c73579cfa5e4c48d187cd267f42f0d0d544e376b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java @@ -25,6 +25,7 @@ import java.util.List; import org.springframework.core.io.AbstractResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; import org.springframework.web.server.ServerWebExchange; /** @@ -74,7 +75,7 @@ public class GzipResourceResolver extends AbstractResourceResolver { } - private static final class GzippedResource extends AbstractResource implements EncodedResource { + private static final class GzippedResource extends AbstractResource implements ResolvedResource { private final Resource original; @@ -138,8 +139,17 @@ public class GzipResourceResolver extends AbstractResourceResolver { return this.gzipped.getDescription(); } - public String getContentEncoding() { - return "gzip"; + @Override + public HttpHeaders getResponseHeaders() { + HttpHeaders headers; + if(this.original instanceof ResolvedResource) { + headers = ((ResolvedResource) this.original).getResponseHeaders(); + } + else { + headers = new HttpHeaders(); + } + headers.add(HttpHeaders.CONTENT_ENCODING, "gzip"); + return headers; } } diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java new file mode 100644 index 0000000000000000000000000000000000000000..edf6f052172b733dc0c36f7341a324a5b1420be8 --- /dev/null +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java @@ -0,0 +1,27 @@ +package org.springframework.web.reactive.resource; + +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; + +/** + * Interface for resources resolved through the + * {@link org.springframework.web.reactive.resource.ResourceResolverChain} + * that may contribute HTTP response headers as they're served to HTTP clients. + * + *

Some resource implementations, while served by the + * {@link org.springframework.web.reactive.resource.ResourceResolverChain} need + * to contribute resource metadata as HTTP response headers so that HTTP clients + * can interpret them properly. + * + * @author Brian Clozel + * @since 5.0 + */ +public interface ResolvedResource extends Resource { + + /** + * The HTTP headers to be contributed to the HTTP response + * that serves the current resource. + * @return the HTTP response headers + */ + HttpHeaders getResponseHeaders(); +} diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java index 8be303f20f54c4ab50ed1f960d1b0ff3887ba169..bd7fbe7bad0e30bc9c3d27e49853675b7d80dac6 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java @@ -482,11 +482,9 @@ public class ResourceWebHandler if (mediaType != null) { headers.setContentType(mediaType); } - if (resource instanceof EncodedResource) { - headers.set(HttpHeaders.CONTENT_ENCODING, ((EncodedResource) resource).getContentEncoding()); - } - if (resource instanceof VersionedResource) { - headers.setETag("\"" + ((VersionedResource) resource).getVersion() + "\""); + if (resource instanceof ResolvedResource) { + HttpHeaders resourceHeaders = ((ResolvedResource) resource).getResponseHeaders(); + exchange.getResponse().getHeaders().putAll(resourceHeaders); } headers.set(HttpHeaders.ACCEPT_RANGES, "bytes"); } diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java index bf71c5507d89cd31469d2f4ee2b7268a713b6f01..39ee7775cb5267dc361c074482c3d2f6bb00457a 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java @@ -31,6 +31,7 @@ import java.util.Map; import org.springframework.core.io.AbstractResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; import org.springframework.util.AntPathMatcher; import org.springframework.util.StringUtils; import org.springframework.web.server.ServerWebExchange; @@ -241,7 +242,7 @@ public class VersionResourceResolver extends AbstractResourceResolver { } - private class FileNameVersionedResource extends AbstractResource implements VersionedResource { + private class FileNameVersionedResource extends AbstractResource implements ResolvedResource { private final Resource original; @@ -318,8 +319,16 @@ public class VersionResourceResolver extends AbstractResourceResolver { } @Override - public String getVersion() { - return this.version; + public HttpHeaders getResponseHeaders() { + HttpHeaders headers; + if(this.original instanceof ResolvedResource) { + headers = ((ResolvedResource) this.original).getResponseHeaders(); + } + else { + headers = new HttpHeaders(); + } + headers.setETag("\"" + this.version + "\""); + return headers; } } diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionedResource.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionedResource.java deleted file mode 100644 index da44b3d1081e541824f55cccadd7a7a7f451969f..0000000000000000000000000000000000000000 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionedResource.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2002-2016 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.resource; - -import org.springframework.core.io.Resource; - -/** - * Interface for a resource descriptor that describes its version with a - * version string that can be derived from its content and/or metadata. - * - * @author Rossen Stoyanchev - * @author Brian Clozel - * @since 5.0 - * @see VersionResourceResolver - */ -public interface VersionedResource extends Resource { - - String getVersion(); - -} diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java index 2b58179fb8770660309f9881db9981b1240cd573..79de27aaebb6b40f0c839905e16ec18906e2a5a2 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java @@ -123,8 +123,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/" + gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } @Test @@ -137,8 +137,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/" + gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/"+file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } @Test @@ -151,8 +151,8 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); // resolved resource is now cached in CachingResourceResolver @@ -165,8 +165,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+file, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertFalse("Expected " + resolved + " to *not* be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertFalse("Expected " + resolved + " to *not* be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } @Test // SPR-13149 @@ -178,7 +178,7 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/" + gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } } diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java index 4a868f082e9825d8463c357c2b7cf2cd842ea3ef..948e89519a38ea0eb6678265087f64047166f84d 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java @@ -163,8 +163,8 @@ public class VersionResourceResolverTests { Resource actual = this.resolver.resolveResourceInternal(exchange, versionFile, this.locations, this.chain); assertEquals(expected.getFilename(), actual.getFilename()); verify(this.versionStrategy, times(1)).getResourceVersion(expected); - assertThat(actual, instanceOf(VersionedResource.class)); - assertEquals(version, ((VersionedResource)actual).getVersion()); + assertThat(actual, instanceOf(ResolvedResource.class)); + assertEquals("\"" + version + "\"", ((ResolvedResource)actual).getResponseHeaders().getETag()); } @Test diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResource.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResource.java deleted file mode 100644 index e3b44e25731c2cf4de213bf92c3a370737fc4bf0..0000000000000000000000000000000000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/EncodedResource.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2002-2015 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.resource; - -import org.springframework.core.io.Resource; - -/** - * Interface for a resource descriptor that describes the encoding - * applied to the entire resource content. - * - *

This information is required if the client consuming that resource - * needs additional decoding capabilities to retrieve the resource's content. - * - * @author Jeremy Grelle - * @since 4.1 - * @see HTTP/1.1: Semantics - * and Content, section 3.1.2.2 - */ -public interface EncodedResource extends Resource { - - /** - * The content coding value, as defined in the IANA registry - * @return the content encoding - * @see HTTP/1.1: Semantics - * and Content, section 3.1.2.1 - */ - String getContentEncoding(); - -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java index 4187758514c02d8b314456a88f3baf7d637e75c2..040644fd4a58cbb840e3812a1fdec95669dedf3b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java @@ -22,10 +22,12 @@ import java.io.InputStream; import java.net.URI; import java.net.URL; import java.util.List; + import javax.servlet.http.HttpServletRequest; import org.springframework.core.io.AbstractResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; /** * A {@code ResourceResolver} that delegates to the chain to locate a resource @@ -76,7 +78,7 @@ public class GzipResourceResolver extends AbstractResourceResolver { } - private static final class GzippedResource extends AbstractResource implements EncodedResource { + private static final class GzippedResource extends AbstractResource implements ResolvedResource { private final Resource original; @@ -140,9 +142,19 @@ public class GzipResourceResolver extends AbstractResourceResolver { return this.gzipped.getDescription(); } - public String getContentEncoding() { - return "gzip"; + @Override + public HttpHeaders getResponseHeaders() { + HttpHeaders headers; + if(this.original instanceof ResolvedResource) { + headers = ((ResolvedResource) this.original).getResponseHeaders(); + } + else { + headers = new HttpHeaders(); + } + headers.add(HttpHeaders.CONTENT_ENCODING, "gzip"); + return headers; } + } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java new file mode 100644 index 0000000000000000000000000000000000000000..fd1261cc5c1d11845737e1e7cbb97ff35a2b74c3 --- /dev/null +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java @@ -0,0 +1,27 @@ +package org.springframework.web.servlet.resource; + +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; + +/** + * Interface for resources resolved through the + * {@link org.springframework.web.servlet.resource.ResourceResolverChain} + * that may contribute HTTP response headers as they're served to HTTP clients. + * + *

Some resource implementations, while served by the + * {@link org.springframework.web.servlet.resource.ResourceResolverChain} need + * to contribute resource metadata as HTTP response headers so that HTTP clients + * can interpret them properly. + * + * @author Brian Clozel + * @since 5.0 + */ +public interface ResolvedResource extends Resource { + + /** + * The HTTP headers to be contributed to the HTTP response + * that serves the current resource. + * @return the HTTP response headers + */ + HttpHeaders getResponseHeaders(); +} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java index e779bef52dbc91edb8b27ff575add8da718f6111..0b6fc850bb34919f0119533e08859ab453113a5e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java @@ -542,11 +542,10 @@ public class ResourceHttpRequestHandler extends WebContentGenerator if (mediaType != null) { response.setContentType(mediaType.toString()); } - if (resource instanceof EncodedResource) { - response.setHeader(HttpHeaders.CONTENT_ENCODING, ((EncodedResource) resource).getContentEncoding()); - } - if (resource instanceof VersionedResource) { - response.setHeader(HttpHeaders.ETAG, "\"" + ((VersionedResource) resource).getVersion() + "\""); + if (resource instanceof ResolvedResource) { + HttpHeaders resourceHeaders = ((ResolvedResource) resource).getResponseHeaders(); + resourceHeaders.toSingleValueMap().entrySet() + .stream().forEach(entry -> response.setHeader(entry.getKey(), entry.getValue())); } response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java index 5f897f7f9d4144fcddb6950305e5100d4d61d99e..ad9f45ca221353273ec8ba38702fead9b1163ff7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java @@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.core.io.AbstractResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; import org.springframework.util.AntPathMatcher; import org.springframework.util.StringUtils; @@ -238,7 +239,7 @@ public class VersionResourceResolver extends AbstractResourceResolver { } - private class FileNameVersionedResource extends AbstractResource implements VersionedResource { + private class FileNameVersionedResource extends AbstractResource implements ResolvedResource { private final Resource original; @@ -315,9 +316,18 @@ public class VersionResourceResolver extends AbstractResourceResolver { } @Override - public String getVersion() { - return this.version; + public HttpHeaders getResponseHeaders() { + HttpHeaders headers; + if(this.original instanceof ResolvedResource) { + headers = ((ResolvedResource) this.original).getResponseHeaders(); + } + else { + headers = new HttpHeaders(); + } + headers.setETag("\"" + this.version + "\""); + return headers; } + } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionedResource.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionedResource.java deleted file mode 100644 index c780df8c8915354ba4efbb660d113f317df870f7..0000000000000000000000000000000000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionedResource.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2002-2016 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.servlet.resource; - -import org.springframework.core.io.Resource; - -/** - * Interface for a resource descriptor that describes its version with a - * version string that can be derived from its content and/or metadata. - * - * @author Brian Clozel - * @since 4.2.5 - * @see VersionResourceResolver - */ -public interface VersionedResource extends Resource { - - String getVersion(); - -} diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java index a3e9c64fec7e27bb050e9cba087a5c5920fd450c..cbbfd3847715e911d562f618549e677431bc5977 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java @@ -111,8 +111,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } @Test @@ -126,8 +126,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/"+file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } @Test @@ -141,8 +141,8 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); // resolved resource is now cached in CachingResourceResolver @@ -152,8 +152,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+file, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertFalse("Expected " + resolved + " to *not* be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertFalse("Expected " + resolved + " to *not* be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } @Test // SPR-13149 @@ -165,8 +165,8 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + EncodedResource.class, - resolved instanceof EncodedResource); + assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, + resolved instanceof ResolvedResource); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java index a38f416f4b8e098ca9e08b5fcd910fe704e33bf9..65f9d108651c68adb084e9fa2b117ffc54640a5c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java @@ -150,8 +150,8 @@ public class VersionResourceResolverTests { Resource actual = this.resolver.resolveResourceInternal(request, versionFile, this.locations, this.chain); assertEquals(expected.getFilename(), actual.getFilename()); verify(this.versionStrategy, times(1)).getResourceVersion(expected); - assertThat(actual, instanceOf(VersionedResource.class)); - assertEquals(version, ((VersionedResource)actual).getVersion()); + assertThat(actual, instanceOf(ResolvedResource.class)); + assertEquals("\"" + version + "\"", ((ResolvedResource)actual).getResponseHeaders().getETag()); } @Test