Rename ContentTypeResolver to RequestedContentTypeResolver
This commit is contained in:
parent
37404d081e
commit
a017e2848a
|
@ -81,7 +81,7 @@ public abstract class AbstractMappingContentTypeResolver implements MappingConte
|
|||
}
|
||||
|
||||
|
||||
// ContentTypeResolver implementation
|
||||
// RequestedContentTypeResolver implementation
|
||||
|
||||
@Override
|
||||
public List<MediaType> resolveMediaTypes(ServerWebExchange exchange)
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.springframework.web.server.NotAcceptableStatusException;
|
|||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
/**
|
||||
* A {@link ContentTypeResolver} that contains and delegates to a list of other
|
||||
* A {@link RequestedContentTypeResolver} that contains and delegates to a list of other
|
||||
* resolvers.
|
||||
*
|
||||
* <p>Also an implementation of {@link MappingContentTypeResolver} that delegates
|
||||
|
@ -38,10 +38,10 @@ import org.springframework.web.server.ServerWebExchange;
|
|||
*/
|
||||
public class CompositeContentTypeResolver implements MappingContentTypeResolver {
|
||||
|
||||
private final List<ContentTypeResolver> resolvers = new ArrayList<>();
|
||||
private final List<RequestedContentTypeResolver> resolvers = new ArrayList<>();
|
||||
|
||||
|
||||
public CompositeContentTypeResolver(List<ContentTypeResolver> resolvers) {
|
||||
public CompositeContentTypeResolver(List<RequestedContentTypeResolver> resolvers) {
|
||||
Assert.notEmpty(resolvers, "At least one resolver is expected.");
|
||||
this.resolvers.addAll(resolvers);
|
||||
}
|
||||
|
@ -50,18 +50,18 @@ public class CompositeContentTypeResolver implements MappingContentTypeResolver
|
|||
/**
|
||||
* Return a read-only list of the configured resolvers.
|
||||
*/
|
||||
public List<ContentTypeResolver> getResolvers() {
|
||||
public List<RequestedContentTypeResolver> getResolvers() {
|
||||
return Collections.unmodifiableList(this.resolvers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the first {@link ContentTypeResolver} of the given type.
|
||||
* Return the first {@link RequestedContentTypeResolver} of the given type.
|
||||
* @param resolverType the resolver type
|
||||
* @return the first matching resolver or {@code null}.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends ContentTypeResolver> T findResolver(Class<T> resolverType) {
|
||||
for (ContentTypeResolver resolver : this.resolvers) {
|
||||
public <T extends RequestedContentTypeResolver> T findResolver(Class<T> resolverType) {
|
||||
for (RequestedContentTypeResolver resolver : this.resolvers) {
|
||||
if (resolverType.isInstance(resolver)) {
|
||||
return (T) resolver;
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ public class CompositeContentTypeResolver implements MappingContentTypeResolver
|
|||
|
||||
@Override
|
||||
public List<MediaType> resolveMediaTypes(ServerWebExchange exchange) throws NotAcceptableStatusException {
|
||||
for (ContentTypeResolver resolver : this.resolvers) {
|
||||
for (RequestedContentTypeResolver resolver : this.resolvers) {
|
||||
List<MediaType> mediaTypes = resolver.resolveMediaTypes(exchange);
|
||||
if (mediaTypes.isEmpty() || (mediaTypes.size() == 1 && mediaTypes.contains(MediaType.ALL))) {
|
||||
continue;
|
||||
|
@ -85,7 +85,7 @@ public class CompositeContentTypeResolver implements MappingContentTypeResolver
|
|||
@Override
|
||||
public Set<String> getKeysFor(MediaType mediaType) {
|
||||
Set<String> result = new LinkedHashSet<>();
|
||||
for (ContentTypeResolver resolver : this.resolvers) {
|
||||
for (RequestedContentTypeResolver resolver : this.resolvers) {
|
||||
if (resolver instanceof MappingContentTypeResolver)
|
||||
result.addAll(((MappingContentTypeResolver) resolver).getKeysFor(mediaType));
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ public class CompositeContentTypeResolver implements MappingContentTypeResolver
|
|||
@Override
|
||||
public Set<String> getKeys() {
|
||||
Set<String> result = new LinkedHashSet<>();
|
||||
for (ContentTypeResolver resolver : this.resolvers) {
|
||||
for (RequestedContentTypeResolver resolver : this.resolvers) {
|
||||
if (resolver instanceof MappingContentTypeResolver)
|
||||
result.addAll(((MappingContentTypeResolver) resolver).getKeys());
|
||||
}
|
||||
|
|
|
@ -23,11 +23,11 @@ import org.springframework.http.MediaType;
|
|||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
/**
|
||||
* A {@link ContentTypeResolver} that resolves to a fixed list of media types.
|
||||
* A {@link RequestedContentTypeResolver} that resolves to a fixed list of media types.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public class FixedContentTypeResolver implements ContentTypeResolver {
|
||||
public class FixedContentTypeResolver implements RequestedContentTypeResolver {
|
||||
|
||||
private final List<MediaType> mediaTypes;
|
||||
|
||||
|
|
|
@ -23,11 +23,11 @@ import org.springframework.web.server.NotAcceptableStatusException;
|
|||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
/**
|
||||
* A {@link ContentTypeResolver} that checks the 'Accept' request header.
|
||||
* A {@link RequestedContentTypeResolver} that checks the 'Accept' request header.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public class HeaderContentTypeResolver implements ContentTypeResolver {
|
||||
public class HeaderContentTypeResolver implements RequestedContentTypeResolver {
|
||||
|
||||
@Override
|
||||
public List<MediaType> resolveMediaTypes(ServerWebExchange exchange) throws NotAcceptableStatusException {
|
||||
|
|
|
@ -16,18 +16,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} that maintains a mapping between
|
||||
* An extension of {@link RequestedContentTypeResolver} that maintains a mapping between
|
||||
* keys (e.g. file extension, query parameter) and media types.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public interface MappingContentTypeResolver extends ContentTypeResolver {
|
||||
public interface MappingContentTypeResolver extends RequestedContentTypeResolver {
|
||||
|
||||
/**
|
||||
* Resolve the given media type to a list of path extensions.
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.springframework.web.server.NotAcceptableStatusException;
|
|||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
/**
|
||||
* A {@link ContentTypeResolver} that extracts the media type lookup key from a
|
||||
* A {@link RequestedContentTypeResolver} that extracts the media type lookup key from a
|
||||
* known query parameter named "format" by default.
|
||||
*s
|
||||
* @author Rossen Stoyanchev
|
||||
|
|
|
@ -32,7 +32,7 @@ import org.springframework.web.server.ServerWebExchange;
|
|||
import org.springframework.web.util.WebUtils;
|
||||
|
||||
/**
|
||||
* A {@link ContentTypeResolver} that extracts the file extension from the
|
||||
* A {@link RequestedContentTypeResolver} that extracts the file extension from the
|
||||
* request path and uses that as the media type lookup key.
|
||||
*
|
||||
* <p>If the file extension is not found in the explicit registrations provided
|
||||
|
|
|
@ -22,10 +22,11 @@ import org.springframework.web.server.NotAcceptableStatusException;
|
|||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
/**
|
||||
* Strategy for resolving the requested media types for a {@code ServerWebExchange}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public interface ContentTypeResolver {
|
||||
public interface RequestedContentTypeResolver {
|
||||
|
||||
/**
|
||||
* Resolve the given request to a list of requested media types. The returned
|
||||
|
@ -36,6 +37,7 @@ public interface ContentTypeResolver {
|
|||
*
|
||||
* @throws NotAcceptableStatusException if the requested media types is invalid
|
||||
*/
|
||||
List<MediaType> resolveMediaTypes(ServerWebExchange exchange) throws NotAcceptableStatusException;
|
||||
List<MediaType> resolveMediaTypes(ServerWebExchange exchange)
|
||||
throws NotAcceptableStatusException;
|
||||
|
||||
}
|
|
@ -28,7 +28,7 @@ import org.springframework.util.CollectionUtils;
|
|||
|
||||
/**
|
||||
* Factory to create a {@link CompositeContentTypeResolver} and configure it with
|
||||
* one or more {@link ContentTypeResolver} instances with build style methods.
|
||||
* one or more {@link RequestedContentTypeResolver} instances with build style methods.
|
||||
* The following table shows methods, resulting strategy instances, and if in
|
||||
* use by default:
|
||||
*
|
||||
|
@ -60,7 +60,7 @@ import org.springframework.util.CollectionUtils;
|
|||
* </tr>
|
||||
* <tr>
|
||||
* <td>{@link #defaultContentTypeResolver}</td>
|
||||
* <td>{@link ContentTypeResolver}</td>
|
||||
* <td>{@link RequestedContentTypeResolver}</td>
|
||||
* <td>Not set</td>
|
||||
* </tr>
|
||||
* </table>
|
||||
|
@ -79,7 +79,7 @@ import org.springframework.util.CollectionUtils;
|
|||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public class CompositeContentTypeResolverBuilder {
|
||||
public class RequestedContentTypeResolverBuilder {
|
||||
|
||||
private boolean favorPathExtension = true;
|
||||
|
||||
|
@ -95,7 +95,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
|
||||
private String parameterName = "format";
|
||||
|
||||
private ContentTypeResolver contentTypeResolver;
|
||||
private RequestedContentTypeResolver contentTypeResolver;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -105,7 +105,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* for {@code /hotels.pdf} will be interpreted as a request for
|
||||
* {@code "application/pdf"} regardless of the 'Accept' header.
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder favorPathExtension(boolean favorPathExtension) {
|
||||
public RequestedContentTypeResolverBuilder favorPathExtension(boolean favorPathExtension) {
|
||||
this.favorPathExtension = favorPathExtension;
|
||||
return this;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* resolve path extensions. To change this behavior see {@link #useJaf}.
|
||||
* @param mediaTypes media type mappings
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder mediaTypes(Map<String, MediaType> mediaTypes) {
|
||||
public RequestedContentTypeResolverBuilder mediaTypes(Map<String, MediaType> mediaTypes) {
|
||||
if (!CollectionUtils.isEmpty(mediaTypes)) {
|
||||
for (Map.Entry<String, MediaType> entry : mediaTypes.entrySet()) {
|
||||
String extension = entry.getKey().toLowerCase(Locale.ENGLISH);
|
||||
|
@ -134,7 +134,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
/**
|
||||
* Alternative to {@link #mediaTypes} to add a single mapping.
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder mediaType(String key, MediaType mediaType) {
|
||||
public RequestedContentTypeResolverBuilder mediaType(String key, MediaType mediaType) {
|
||||
this.mediaTypes.put(key, mediaType);
|
||||
return this;
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* there is no match.
|
||||
* <p>By default this is set to {@code true}.
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder ignoreUnknownPathExtensions(boolean ignore) {
|
||||
public RequestedContentTypeResolverBuilder ignoreUnknownPathExtensions(boolean ignore) {
|
||||
this.ignoreUnknownPathExtensions = ignore;
|
||||
return this;
|
||||
}
|
||||
|
@ -158,7 +158,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* <p>By default this is not set in which case
|
||||
* {@code PathExtensionContentNegotiationStrategy} will use JAF if available.
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder useJaf(boolean useJaf) {
|
||||
public RequestedContentTypeResolverBuilder useJaf(boolean useJaf) {
|
||||
this.useJaf = useJaf;
|
||||
return this;
|
||||
}
|
||||
|
@ -170,7 +170,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* <p>By default this is set to {@code false}.
|
||||
* @see #parameterName
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder favorParameter(boolean favorParameter) {
|
||||
public RequestedContentTypeResolverBuilder favorParameter(boolean favorParameter) {
|
||||
this.favorParameter = favorParameter;
|
||||
return this;
|
||||
}
|
||||
|
@ -179,7 +179,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* Set the query parameter name to use when {@link #favorParameter} is on.
|
||||
* <p>The default parameter name is {@code "format"}.
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder parameterName(String parameterName) {
|
||||
public RequestedContentTypeResolverBuilder parameterName(String parameterName) {
|
||||
Assert.notNull(parameterName, "parameterName is required");
|
||||
this.parameterName = parameterName;
|
||||
return this;
|
||||
|
@ -189,7 +189,7 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* Whether to disable checking the 'Accept' request header.
|
||||
* <p>By default this value is set to {@code false}.
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder ignoreAcceptHeader(boolean ignoreAcceptHeader) {
|
||||
public RequestedContentTypeResolverBuilder ignoreAcceptHeader(boolean ignoreAcceptHeader) {
|
||||
this.ignoreAcceptHeader = ignoreAcceptHeader;
|
||||
return this;
|
||||
}
|
||||
|
@ -199,25 +199,25 @@ public class CompositeContentTypeResolverBuilder {
|
|||
* <p>By default this is not set.
|
||||
* @see #defaultContentTypeResolver
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder defaultContentType(MediaType contentType) {
|
||||
public RequestedContentTypeResolverBuilder defaultContentType(MediaType contentType) {
|
||||
this.contentTypeResolver = new FixedContentTypeResolver(contentType);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a custom {@link ContentTypeResolver} to use to determine
|
||||
* Set a custom {@link RequestedContentTypeResolver} to use to determine
|
||||
* the content type to use when no content type is requested.
|
||||
* <p>By default this is not set.
|
||||
* @see #defaultContentType
|
||||
*/
|
||||
public CompositeContentTypeResolverBuilder defaultContentTypeResolver(ContentTypeResolver resolver) {
|
||||
public RequestedContentTypeResolverBuilder defaultContentTypeResolver(RequestedContentTypeResolver resolver) {
|
||||
this.contentTypeResolver = resolver;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public CompositeContentTypeResolver build() {
|
||||
List<ContentTypeResolver> resolvers = new ArrayList<>();
|
||||
public RequestedContentTypeResolver build() {
|
||||
List<RequestedContentTypeResolver> resolvers = new ArrayList<>();
|
||||
|
||||
if (this.favorPathExtension) {
|
||||
PathExtensionContentTypeResolver resolver = new PathExtensionContentTypeResolver(this.mediaTypes);
|
|
@ -27,8 +27,8 @@ import java.util.Set;
|
|||
import org.springframework.http.MediaType;
|
||||
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.RequestedContentTypeResolverBuilder;
|
||||
import org.springframework.web.reactive.accept.RequestedContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.HeaderContentTypeResolver;
|
||||
import org.springframework.web.server.NotAcceptableStatusException;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
@ -52,7 +52,7 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
|||
|
||||
private final List<ProduceMediaTypeExpression> expressions;
|
||||
|
||||
private final ContentTypeResolver contentTypeResolver;
|
||||
private final RequestedContentTypeResolver contentTypeResolver;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -83,7 +83,7 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
|||
* @param headers expressions with syntax defined by {@link RequestMapping#headers()}
|
||||
* @param resolver used to determine requested content type
|
||||
*/
|
||||
public ProducesRequestCondition(String[] produces, String[] headers, ContentTypeResolver resolver) {
|
||||
public ProducesRequestCondition(String[] produces, String[] headers, RequestedContentTypeResolver resolver) {
|
||||
this.expressions = new ArrayList<>(parseExpressions(produces, headers));
|
||||
Collections.sort(this.expressions);
|
||||
this.contentTypeResolver = (resolver != null ? resolver : new HeaderContentTypeResolver());
|
||||
|
@ -93,12 +93,12 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
|||
* Private constructor with already parsed media type expressions.
|
||||
*/
|
||||
private ProducesRequestCondition(Collection<ProduceMediaTypeExpression> expressions,
|
||||
ContentTypeResolver resolver) {
|
||||
RequestedContentTypeResolver resolver) {
|
||||
|
||||
this.expressions = new ArrayList<>(expressions);
|
||||
Collections.sort(this.expressions);
|
||||
this.contentTypeResolver = (resolver != null ?
|
||||
resolver : new CompositeContentTypeResolverBuilder().build());
|
||||
resolver : new RequestedContentTypeResolverBuilder().build());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ 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.RequestedContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.MappingContentTypeResolver;
|
||||
import org.springframework.web.reactive.result.condition.ConsumesRequestCondition;
|
||||
import org.springframework.web.reactive.result.condition.HeadersRequestCondition;
|
||||
|
@ -468,7 +468,7 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
|||
|
||||
@Override
|
||||
public RequestMappingInfo build() {
|
||||
ContentTypeResolver contentTypeResolver = this.options.getContentTypeResolver();
|
||||
RequestedContentTypeResolver contentTypeResolver = this.options.getContentTypeResolver();
|
||||
|
||||
PatternsRequestCondition patternsCondition = new PatternsRequestCondition(
|
||||
this.paths, this.options.getPathHelper(), this.options.getPathMatcher(),
|
||||
|
@ -504,7 +504,7 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
|||
|
||||
private boolean registeredSuffixPatternMatch = false;
|
||||
|
||||
private ContentTypeResolver contentTypeResolver;
|
||||
private RequestedContentTypeResolver contentTypeResolver;
|
||||
|
||||
/**
|
||||
* Set a custom UrlPathHelper to use for the PatternsRequestCondition.
|
||||
|
@ -577,7 +577,7 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
|||
* from the configured {@code contentTypeResolver}.
|
||||
*/
|
||||
public Set<String> getFileExtensions() {
|
||||
ContentTypeResolver resolver = getContentTypeResolver();
|
||||
RequestedContentTypeResolver resolver = getContentTypeResolver();
|
||||
if (useRegisteredSuffixPatternMatch() && resolver != null) {
|
||||
if (resolver instanceof MappingContentTypeResolver) {
|
||||
return ((MappingContentTypeResolver) resolver).getKeys();
|
||||
|
@ -590,11 +590,11 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
|||
* Set the ContentNegotiationManager to use for the ProducesRequestCondition.
|
||||
* <p>By default this is not set.
|
||||
*/
|
||||
public void setContentTypeResolver(ContentTypeResolver resolver) {
|
||||
public void setContentTypeResolver(RequestedContentTypeResolver resolver) {
|
||||
this.contentTypeResolver = resolver;
|
||||
}
|
||||
|
||||
public ContentTypeResolver getContentTypeResolver() {
|
||||
public RequestedContentTypeResolver getContentTypeResolver() {
|
||||
return this.contentTypeResolver;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,8 +26,8 @@ import org.springframework.stereotype.Controller;
|
|||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringValueResolver;
|
||||
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.RequestedContentTypeResolverBuilder;
|
||||
import org.springframework.web.reactive.accept.RequestedContentTypeResolver;
|
||||
import org.springframework.web.reactive.result.condition.RequestCondition;
|
||||
import org.springframework.web.reactive.result.method.RequestMappingInfo;
|
||||
import org.springframework.web.reactive.result.method.RequestMappingInfoHandlerMapping;
|
||||
|
@ -48,7 +48,7 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi
|
|||
|
||||
private boolean useTrailingSlashMatch = true;
|
||||
|
||||
private ContentTypeResolver contentTypeResolver = new CompositeContentTypeResolverBuilder().build();
|
||||
private RequestedContentTypeResolver contentTypeResolver = new RequestedContentTypeResolverBuilder().build();
|
||||
|
||||
private StringValueResolver embeddedValueResolver;
|
||||
|
||||
|
@ -70,7 +70,7 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi
|
|||
|
||||
/**
|
||||
* Whether suffix pattern matching should work only against path extensions
|
||||
* explicitly registered with the configured {@link ContentTypeResolver}. This
|
||||
* explicitly registered with the configured {@link RequestedContentTypeResolver}. This
|
||||
* is generally recommended to reduce ambiguity and to avoid issues such as
|
||||
* when a "." appears in the path for other reasons.
|
||||
* <p>By default this is set to "true".
|
||||
|
@ -90,11 +90,11 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the {@link ContentTypeResolver} to use to determine requested media types.
|
||||
* Set the {@link RequestedContentTypeResolver} to use to determine requested media types.
|
||||
* If not set, the default constructor is used.
|
||||
*/
|
||||
public void setContentTypeResolver(ContentTypeResolver contentTypeResolver) {
|
||||
Assert.notNull(contentTypeResolver, "'ContentTypeResolver' must not be null");
|
||||
public void setContentTypeResolver(RequestedContentTypeResolver contentTypeResolver) {
|
||||
Assert.notNull(contentTypeResolver, "'contentTypeResolver' must not be null");
|
||||
this.contentTypeResolver = contentTypeResolver;
|
||||
}
|
||||
|
||||
|
@ -139,9 +139,9 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the configured {@link ContentTypeResolver}.
|
||||
* Return the configured {@link RequestedContentTypeResolver}.
|
||||
*/
|
||||
public ContentTypeResolver getContentTypeResolver() {
|
||||
public RequestedContentTypeResolver getContentTypeResolver() {
|
||||
return this.contentTypeResolver;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
|||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.reactive.HandlerResult;
|
||||
import org.springframework.web.reactive.HandlerResultHandler;
|
||||
import org.springframework.web.reactive.accept.ContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.RequestedContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.HeaderContentTypeResolver;
|
||||
import org.springframework.web.server.NotAcceptableStatusException;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
@ -66,7 +66,7 @@ public class ResponseBodyResultHandler implements HandlerResultHandler, Ordered
|
|||
|
||||
private final ConversionService conversionService;
|
||||
|
||||
private final ContentTypeResolver contentTypeResolver;
|
||||
private final RequestedContentTypeResolver contentTypeResolver;
|
||||
|
||||
private final List<MediaType> supportedMediaTypes;
|
||||
|
||||
|
@ -89,13 +89,13 @@ public class ResponseBodyResultHandler implements HandlerResultHandler, Ordered
|
|||
|
||||
/**
|
||||
* Constructor with message converters, a {@code ConversionService}, and a
|
||||
* {@code ContentTypeResolver}.
|
||||
* {@code RequestedContentTypeResolver}.
|
||||
*
|
||||
* @param messageConverters converters for writing the response body with
|
||||
* @param conversionService for converting to Flux and Mono from other reactive types
|
||||
*/
|
||||
public ResponseBodyResultHandler(List<HttpMessageConverter<?>> messageConverters,
|
||||
ConversionService conversionService, ContentTypeResolver contentTypeResolver) {
|
||||
ConversionService conversionService, RequestedContentTypeResolver contentTypeResolver) {
|
||||
|
||||
Assert.notEmpty(messageConverters, "At least one message converter is required.");
|
||||
Assert.notNull(conversionService, "'conversionService' is required.");
|
||||
|
|
|
@ -35,7 +35,7 @@ import static org.junit.Assert.assertEquals;
|
|||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link CompositeContentTypeResolverBuilder}.
|
||||
* Unit tests for {@link RequestedContentTypeResolverBuilder}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
|
@ -43,7 +43,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test
|
||||
public void defaultSettings() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder().build();
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder().build();
|
||||
|
||||
ServerWebExchange exchange = createExchange("/flower.gif");
|
||||
|
||||
|
@ -70,7 +70,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test
|
||||
public void favorPath() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.favorPathExtension(true)
|
||||
.mediaType("foo", new MediaType("application", "foo"))
|
||||
.mediaType("bar", new MediaType("application", "bar"))
|
||||
|
@ -90,7 +90,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test
|
||||
public void favorPathWithJafTurnedOff() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.favorPathExtension(true)
|
||||
.useJaf(false)
|
||||
.build();
|
||||
|
@ -104,7 +104,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test(expected = NotAcceptableStatusException.class) // SPR-10170
|
||||
public void favorPathWithIgnoreUnknownPathExtensionTurnedOff() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.favorPathExtension(true)
|
||||
.ignoreUnknownPathExtensions(false)
|
||||
.build();
|
||||
|
@ -117,7 +117,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test
|
||||
public void favorParameter() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.favorParameter(true)
|
||||
.mediaType("json", MediaType.APPLICATION_JSON)
|
||||
.build();
|
||||
|
@ -131,7 +131,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test(expected = NotAcceptableStatusException.class) // SPR-10170
|
||||
public void favorParameterWithUnknownMediaType() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.favorParameter(true)
|
||||
.build();
|
||||
|
||||
|
@ -143,7 +143,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test
|
||||
public void ignoreAcceptHeader() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.ignoreAcceptHeader(true)
|
||||
.build();
|
||||
|
||||
|
@ -155,7 +155,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test // SPR-10513
|
||||
public void setDefaultContentType() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.defaultContentType(MediaType.APPLICATION_JSON)
|
||||
.build();
|
||||
|
||||
|
@ -172,7 +172,7 @@ public class CompositeContentTypeResolverBuilderTests {
|
|||
|
||||
@Test // SPR-12286
|
||||
public void setDefaultContentTypeWithStrategy() throws Exception {
|
||||
CompositeContentTypeResolver resolver = new CompositeContentTypeResolverBuilder()
|
||||
RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder()
|
||||
.defaultContentTypeResolver(new FixedContentTypeResolver(MediaType.APPLICATION_JSON))
|
||||
.build();
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
|||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.reactive.HandlerResult;
|
||||
import org.springframework.web.reactive.HandlerResultHandler;
|
||||
import org.springframework.web.reactive.accept.ContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.RequestedContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.FixedContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.HeaderContentTypeResolver;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
@ -90,7 +90,7 @@ public class ResponseBodyResultHandlerTests {
|
|||
@Test
|
||||
public void contentTypeResolver() throws Exception {
|
||||
MediaType contentType = MediaType.APPLICATION_JSON_UTF8;
|
||||
ContentTypeResolver resolver = new FixedContentTypeResolver(contentType);
|
||||
RequestedContentTypeResolver resolver = new FixedContentTypeResolver(contentType);
|
||||
HandlerResultHandler handler = createHandler(resolver, new StringEncoder(), new JacksonJsonEncoder());
|
||||
|
||||
ServerWebExchange exchange = createExchange("/foo");
|
||||
|
@ -105,7 +105,7 @@ public class ResponseBodyResultHandlerTests {
|
|||
return createHandler(new HeaderContentTypeResolver(), encoders);
|
||||
}
|
||||
|
||||
private ResponseBodyResultHandler createHandler(ContentTypeResolver resolver,
|
||||
private ResponseBodyResultHandler createHandler(RequestedContentTypeResolver resolver,
|
||||
Encoder<?>... encoders) {
|
||||
|
||||
List<HttpMessageConverter<?>> converters = Arrays.stream(encoders)
|
||||
|
|
Loading…
Reference in New Issue