diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/accept/FixedContentTypeResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/accept/FixedContentTypeResolver.java index 9f8b8e2ea9a..7f6795d2669 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/accept/FixedContentTypeResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/accept/FixedContentTypeResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2017 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. @@ -19,30 +19,58 @@ package org.springframework.web.reactive.accept; import java.util.Collections; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.http.MediaType; import org.springframework.web.server.ServerWebExchange; /** - * A {@link RequestedContentTypeResolver} that resolves to a fixed list of media types. + * {@code RequestedContentTypeResolver} with a fixed list of media types. * * @author Rossen Stoyanchev * @since 5.0 */ public class FixedContentTypeResolver implements RequestedContentTypeResolver { + private static final Log logger = LogFactory.getLog(FixedContentTypeResolver.class); + + private final List mediaTypes; /** - * Create an instance with the given content type. + * Constructor with a single default {@code MediaType}. */ - public FixedContentTypeResolver(MediaType mediaTypes) { - this.mediaTypes = Collections.singletonList(mediaTypes); + public FixedContentTypeResolver(MediaType mediaType) { + this(Collections.singletonList(mediaType)); } + /** + * Constructor with an ordered List of default {@code MediaType}'s to return + * for use in applications that support a variety of content types. + *

Consider appending {@link MediaType#ALL} at the end if destinations + * are present which do not support any of the other default media types. + */ + public FixedContentTypeResolver(List mediaTypes) { + this.mediaTypes = Collections.unmodifiableList(mediaTypes); + } + + + /** + * Return the configured list of media types. + */ + public List getContentTypes() { + return this.mediaTypes; + } + + @Override public List resolveMediaTypes(ServerWebExchange exchange) { + if (logger.isDebugEnabled()) { + logger.debug("Requested media types: " + this.mediaTypes); + } return this.mediaTypes; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilder.java index 893ed225e8d..264ce1fa290 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilder.java @@ -16,6 +16,7 @@ package org.springframework.web.reactive.accept; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -198,12 +199,18 @@ public class RequestedContentTypeResolverBuilder { } /** - * Set the default content type to use when no content type is requested. + * Set the default content type(s) to use when no content type is requested + * in order of priority. + * + *

If destinations are present that do not support any of the given media + * types, consider appending {@link MediaType#ALL} at the end. + * *

By default this is not set. + * * @see #defaultContentTypeResolver */ - public RequestedContentTypeResolverBuilder defaultContentType(MediaType contentType) { - this.contentTypeResolver = new FixedContentTypeResolver(contentType); + public RequestedContentTypeResolverBuilder defaultContentType(MediaType... contentTypes) { + this.contentTypeResolver = new FixedContentTypeResolver(Arrays.asList(contentTypes)); return this; }