Switch defaults for ContentTypeResolver

Now that we have a CompositeContentTypeResolverBuilder with built-in
defaults, we switch to those defaults in places where a
ContentTypeResolver is used.
This commit is contained in:
Rossen Stoyanchev
2016-04-18 17:50:57 -04:00
parent 4af99473ff
commit 92c72b93a6
4 changed files with 56 additions and 4 deletions

View File

@@ -27,7 +27,55 @@ import org.springframework.util.CollectionUtils;
/**
* Builder for {@link CompositeContentTypeResolver}.
* Factory to create a {@link CompositeContentTypeResolver} and configure it with
* one or more {@link ContentTypeResolver} instances with build style methods.
* The following table shows methods, resulting strategy instances, and if in
* use by default:
*
* <table>
* <tr>
* <th>Property Setter</th>
* <th>Underlying Strategy</th>
* <th>Default Setting</th>
* </tr>
* <tr>
* <td>{@link #favorPathExtension}</td>
* <td>{@link PathExtensionContentTypeResolver Path Extension resolver}</td>
* <td>On</td>
* </tr>
* <tr>
* <td>{@link #favorParameter}</td>
* <td>{@link ParameterContentTypeResolver Parameter resolver}</td>
* <td>Off</td>
* </tr>
* <tr>
* <td>{@link #ignoreAcceptHeader}</td>
* <td>{@link HeaderContentTypeResolver Header resolver}</td>
* <td>On</td>
* </tr>
* <tr>
* <td>{@link #defaultContentType}</td>
* <td>{@link FixedContentTypeResolver Fixed content resolver}</td>
* <td>Not set</td>
* </tr>
* <tr>
* <td>{@link #defaultContentTypeResolver}</td>
* <td>{@link ContentTypeResolver}</td>
* <td>Not set</td>
* </tr>
* </table>
*
* <p>The order in which resolvers are configured is fixed. Config methods may only
* turn individual resolvers on or off. If you need a custom order for any
* reason simply instantiate {@code {@link CompositeContentTypeResolver}} directly.
*
* <p>For the path extension and parameter resolvers you may explicitly add
* {@link #mediaTypes(Map)}. This will be used to resolve path extensions or a
* parameter value such as "json" to a media type such as "application/json".
*
* <p>The path extension strategy will also use the Java Activation framework
* (JAF), if available, to resolve a path extension to a MediaType. You may
* {@link #useJaf suppress} the use of JAF.
*
* @author Rossen Stoyanchev
*/

View File

@@ -28,6 +28,7 @@ import org.springframework.http.MediaType;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.accept.CompositeContentTypeResolverBuilder;
import org.springframework.web.reactive.accept.ContentTypeResolver;
import org.springframework.web.reactive.accept.HeaderContentTypeResolver;
import org.springframework.web.server.ServerWebExchange;
@@ -96,7 +97,8 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
this.expressions = new ArrayList<>(expressions);
Collections.sort(this.expressions);
this.contentTypeResolver = (resolver != null ? resolver : new HeaderContentTypeResolver());
this.contentTypeResolver = (resolver != null ?
resolver : new CompositeContentTypeResolverBuilder().build());
}

View File

@@ -27,6 +27,8 @@ import org.springframework.util.Assert;
import org.springframework.util.StringValueResolver;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.accept.CompositeContentTypeResolver;
import org.springframework.web.reactive.accept.CompositeContentTypeResolverBuilder;
import org.springframework.web.reactive.accept.ContentTypeResolver;
import org.springframework.web.reactive.accept.HeaderContentTypeResolver;
import org.springframework.web.reactive.result.condition.RequestCondition;
@@ -49,7 +51,7 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi
private boolean useTrailingSlashMatch = true;
private ContentTypeResolver contentTypeResolver = new HeaderContentTypeResolver();
private ContentTypeResolver contentTypeResolver = new CompositeContentTypeResolverBuilder().build();
private StringValueResolver embeddedValueResolver;

View File

@@ -81,7 +81,7 @@ public class RequestMappingHandlerMappingTests {
assertTrue(this.handlerMapping.useSuffixPatternMatch());
assertTrue(this.handlerMapping.useRegisteredSuffixPatternMatch());
assertEquals(Collections.singletonList("json"), this.handlerMapping.getFileExtensions());
assertEquals(Collections.singleton("json"), this.handlerMapping.getFileExtensions());
}
@Test