Support for MediaType mappings in ResourceWebHandler

Closes gh-26170
This commit is contained in:
Rossen Stoyanchev
2020-11-30 17:16:55 +00:00
parent e9caee1b6e
commit e7b0b65244
5 changed files with 110 additions and 2 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.web.reactive.config;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -28,6 +29,7 @@ import reactor.test.StepVerifier;
import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.http.CacheControl;
import org.springframework.http.MediaType;
import org.springframework.http.server.PathContainer;
import org.springframework.web.reactive.HandlerMapping;
import org.springframework.web.reactive.handler.SimpleUrlHandlerMapping;
@@ -99,6 +101,16 @@ public class ResourceHandlerRegistryTests {
.isEqualTo(CacheControl.noCache().cachePrivate().getHeaderValue());
}
@Test
public void mediaTypes() {
MediaType mediaType = MediaType.parseMediaType("foo/bar");
this.registration.setMediaTypes(Collections.singletonMap("bar", mediaType));
ResourceWebHandler requestHandler = this.registration.getRequestHandler();
assertThat(requestHandler.getMediaTypes()).size().isEqualTo(1);
assertThat(requestHandler.getMediaTypes()).containsEntry("bar", mediaType);
}
@Test
public void order() {
assertThat(this.registry.getHandlerMapping().getOrder()).isEqualTo(Integer.MAX_VALUE -1);

View File

@@ -214,6 +214,24 @@ public class ResourceWebHandlerTests {
assertResponseBody(exchange, "function foo() { console.log(\"hello world\"); }");
}
@Test
public void getResourceWithRegisteredMediaType() throws Exception {
MediaType mediaType = new MediaType("foo", "bar");
ResourceWebHandler handler = new ResourceWebHandler();
handler.setLocations(Collections.singletonList(new ClassPathResource("test/", getClass())));
handler.setMediaTypes(Collections.singletonMap("bar", mediaType));
handler.afterPropertiesSet();
MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get(""));
setPathWithinHandlerMapping(exchange, "foo.bar");
handler.handle(exchange).block(TIMEOUT);
HttpHeaders headers = exchange.getResponse().getHeaders();
assertThat(headers.getContentType()).isEqualTo(mediaType);
assertResponseBody(exchange, "foo bar foo bar foo bar");
}
@Test // SPR-14577
public void getMediaTypeWithFavorPathExtensionOff() throws Exception {
List<Resource> paths = Collections.singletonList(new ClassPathResource("test/", getClass()));

View File

@@ -0,0 +1 @@
foo bar foo bar foo bar