From 9ffc0b5e65f7b178247fe040edb19f2c532ff3fb Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 18 Apr 2016 15:44:04 -0400 Subject: [PATCH] Update FileExtensionContentTypeResolver Rename to MappingContentTypeResolver and replace "fileExtension" with "key" in methods to be more general (e.g. file extension or query param). Also switch from List to Set for the return values. --- ...olver.java => MappingContentTypeResolver.java} | 15 ++++++++------- .../condition/PatternsRequestCondition.java | 7 ++++--- .../result/method/RequestMappingInfo.java | 10 +++++----- .../annotation/RequestMappingHandlerMapping.java | 4 ++-- .../condition/PatternsRequestConditionTests.java | 6 +++--- .../RequestMappingHandlerMappingTests.java | 10 +++++----- 6 files changed, 27 insertions(+), 25 deletions(-) rename spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/{FileExtensionContentTypeResolver.java => MappingContentTypeResolver.java} (69%) diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/FileExtensionContentTypeResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/MappingContentTypeResolver.java similarity index 69% rename from spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/FileExtensionContentTypeResolver.java rename to spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/MappingContentTypeResolver.java index 8343c8da7cc..645beed0776 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/FileExtensionContentTypeResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/accept/MappingContentTypeResolver.java @@ -17,16 +17,17 @@ package org.springframework.web.reactive.accept; import java.util.List; +import java.util.Set; import org.springframework.http.MediaType; /** - * An extension of {@link ContentTypeResolver} for a resolver that uses file - * extensions and can expose file extension mappings. + * An extension of {@link ContentTypeResolver} that maintains a mapping between + * keys (e.g. file extension, query parameter) and media types. * * @author Rossen Stoyanchev */ -public interface FileExtensionContentTypeResolver extends ContentTypeResolver { +public interface MappingContentTypeResolver extends ContentTypeResolver { /** * Resolve the given media type to a list of path extensions. @@ -34,12 +35,12 @@ public interface FileExtensionContentTypeResolver extends ContentTypeResolver { * @param mediaType the media type to resolve * @return a list of extensions or an empty list, never {@code null} */ - List getFileExtensions(MediaType mediaType); + Set getKeysFor(MediaType mediaType); /** - * Return all registered file extensions. - * @return a list of extensions or an empty list, never {@code null} + * Return all registered keys (e.g. "json", "xml"). + * @return a list of keys or an empty list, never {@code null} */ - List getAllFileExtensions(); + Set getKeys(); } diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java index cba2fe75ef0..5c30eafe7c0 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -50,7 +51,7 @@ public final class PatternsRequestCondition extends AbstractRequestCondition fileExtensions = new ArrayList(); + private final Set fileExtensions = new HashSet<>(); /** @@ -74,7 +75,7 @@ public final class PatternsRequestCondition extends AbstractRequestCondition extensions) { + Set extensions) { this(asList(patterns), pathHelper, pathMatcher, useSuffixPatternMatch, useTrailingSlashMatch, extensions); } @@ -84,7 +85,7 @@ public final class PatternsRequestCondition extends AbstractRequestCondition patterns, HttpRequestPathHelper pathHelper, PathMatcher pathMatcher, boolean useSuffixPatternMatch, boolean useTrailingSlashMatch, - List fileExtensions) { + Set fileExtensions) { this.patterns = Collections.unmodifiableSet(prependLeadingSlash(patterns)); this.pathHelper = (pathHelper != null ? pathHelper : new HttpRequestPathHelper()); diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/RequestMappingInfo.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/RequestMappingInfo.java index 15f91ea04d6..bebceeb3e2e 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/RequestMappingInfo.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/RequestMappingInfo.java @@ -16,13 +16,13 @@ package org.springframework.web.reactive.result.method; -import java.util.List; +import java.util.Set; import org.springframework.util.PathMatcher; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.reactive.accept.ContentTypeResolver; -import org.springframework.web.reactive.accept.FileExtensionContentTypeResolver; +import org.springframework.web.reactive.accept.MappingContentTypeResolver; import org.springframework.web.reactive.result.condition.ConsumesRequestCondition; import org.springframework.web.reactive.result.condition.HeadersRequestCondition; import org.springframework.web.reactive.result.condition.ParamsRequestCondition; @@ -576,11 +576,11 @@ public final class RequestMappingInfo implements RequestCondition getFileExtensions() { + public Set getFileExtensions() { ContentTypeResolver resolver = getContentTypeResolver(); if (useRegisteredSuffixPatternMatch() && resolver != null) { - if (resolver instanceof FileExtensionContentTypeResolver) { - return ((FileExtensionContentTypeResolver) resolver).getAllFileExtensions(); + if (resolver instanceof MappingContentTypeResolver) { + return ((MappingContentTypeResolver) resolver).getKeys(); } } return null; diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMapping.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMapping.java index 96ec3b6c6e5..26ae11b43aa 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMapping.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMapping.java @@ -18,7 +18,7 @@ package org.springframework.web.reactive.result.method.annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; -import java.util.List; +import java.util.Set; import org.springframework.context.EmbeddedValueResolverAware; import org.springframework.core.annotation.AnnotatedElementUtils; @@ -149,7 +149,7 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi /** * Return the file extensions to use for suffix pattern matching. */ - public List getFileExtensions() { + public Set getFileExtensions() { return this.config.getFileExtensions(); } diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/condition/PatternsRequestConditionTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/condition/PatternsRequestConditionTests.java index 715b247425c..4720f94b6ad 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/condition/PatternsRequestConditionTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/condition/PatternsRequestConditionTests.java @@ -19,7 +19,7 @@ package org.springframework.web.reactive.result.condition; import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; -import java.util.List; +import java.util.Set; import org.junit.Test; @@ -131,7 +131,7 @@ public class PatternsRequestConditionTests { @Test public void matchSuffixPatternUsingFileExtensions() throws Exception { String[] patterns = new String[] {"/jobs/{jobName}"}; - List extensions = Collections.singletonList("json"); + Set extensions = Collections.singleton("json"); PatternsRequestCondition condition = new PatternsRequestCondition(patterns, null, null, true, false, extensions); ServerWebExchange exchange = createExchange("/jobs/my.job"); @@ -150,7 +150,7 @@ public class PatternsRequestConditionTests { @Test public void matchSuffixPatternUsingFileExtensions2() throws Exception { PatternsRequestCondition condition1 = new PatternsRequestCondition( - new String[] {"/prefix"}, null, null, true, false, Collections.singletonList("json")); + new String[] {"/prefix"}, null, null, true, false, Collections.singleton("json")); PatternsRequestCondition condition2 = new PatternsRequestCondition( new String[] {"/suffix"}, null, null, true, false, null); diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMappingTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMappingTests.java index f8feef526d1..3afe014a614 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMappingTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerMappingTests.java @@ -39,7 +39,7 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.support.StaticWebApplicationContext; -import org.springframework.web.reactive.accept.FileExtensionContentTypeResolver; +import org.springframework.web.reactive.accept.MappingContentTypeResolver; import org.springframework.web.reactive.result.method.RequestMappingInfo; import static org.junit.Assert.assertArrayEquals; @@ -73,8 +73,8 @@ public class RequestMappingHandlerMappingTests { assertTrue(this.handlerMapping.useSuffixPatternMatch()); assertTrue(this.handlerMapping.useRegisteredSuffixPatternMatch()); - FileExtensionContentTypeResolver contentTypeResolver = mock(FileExtensionContentTypeResolver.class); - when(contentTypeResolver.getAllFileExtensions()).thenReturn(Collections.singletonList("json")); + MappingContentTypeResolver contentTypeResolver = mock(MappingContentTypeResolver.class); + when(contentTypeResolver.getKeys()).thenReturn(Collections.singleton("json")); this.handlerMapping.setContentTypeResolver(contentTypeResolver); this.handlerMapping.afterPropertiesSet(); @@ -86,8 +86,8 @@ public class RequestMappingHandlerMappingTests { @Test public void useRegisteredSuffixPatternMatchInitialization() { - FileExtensionContentTypeResolver contentTypeResolver = mock(FileExtensionContentTypeResolver.class); - when(contentTypeResolver.getAllFileExtensions()).thenReturn(Collections.singletonList("json")); + MappingContentTypeResolver contentTypeResolver = mock(MappingContentTypeResolver.class); + when(contentTypeResolver.getKeys()).thenReturn(Collections.singleton("json")); final Set actualExtensions = new HashSet<>(); RequestMappingHandlerMapping localHandlerMapping = new RequestMappingHandlerMapping() {