ProducesRequestCondition caches accepted media types
Closes gh-22644
This commit is contained in:
@@ -161,7 +161,7 @@ public abstract class MimeTypeUtils {
|
||||
|
||||
|
||||
private static final ConcurrentLruCache<String, MimeType> cachedMimeTypes =
|
||||
new ConcurrentLruCache<>(32, MimeTypeUtils::parseMimeTypeInternal);
|
||||
new ConcurrentLruCache<>(64, MimeTypeUtils::parseMimeTypeInternal);
|
||||
|
||||
@Nullable
|
||||
private static volatile Random random;
|
||||
|
||||
@@ -52,6 +52,8 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
||||
|
||||
private static final ProducesRequestCondition EMPTY_CONDITION = new ProducesRequestCondition();
|
||||
|
||||
private static final String MEDIA_TYPES_ATTRIBUTE = ProducesRequestCondition.class.getName() + ".MEDIA_TYPES";
|
||||
|
||||
|
||||
private final List<ProduceMediaTypeExpression> mediaTypeAllList =
|
||||
Collections.singletonList(new ProduceMediaTypeExpression(MediaType.ALL_VALUE));
|
||||
@@ -262,7 +264,12 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
||||
}
|
||||
|
||||
private List<MediaType> getAcceptedMediaTypes(ServerWebExchange exchange) throws NotAcceptableStatusException {
|
||||
return this.contentTypeResolver.resolveMediaTypes(exchange);
|
||||
List<MediaType> result = exchange.getAttribute(MEDIA_TYPES_ATTRIBUTE);
|
||||
if (result == null) {
|
||||
result = this.contentTypeResolver.resolveMediaTypes(exchange);
|
||||
exchange.getAttributes().put(MEDIA_TYPES_ATTRIBUTE, result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private int indexOfEqualMediaType(MediaType mediaType) {
|
||||
|
||||
@@ -171,6 +171,8 @@ public final class ConsumesRequestCondition extends AbstractRequestCondition<Con
|
||||
return this;
|
||||
}
|
||||
|
||||
// Common media types are cached at the level of MimeTypeUtils
|
||||
|
||||
MediaType contentType;
|
||||
try {
|
||||
contentType = (StringUtils.hasLength(request.getContentType()) ?
|
||||
|
||||
@@ -56,6 +56,8 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
||||
private static final List<ProduceMediaTypeExpression> MEDIA_TYPE_ALL_LIST =
|
||||
Collections.singletonList(new ProduceMediaTypeExpression(MediaType.ALL_VALUE));
|
||||
|
||||
private static final String MEDIA_TYPES_ATTRIBUTE = ProducesRequestCondition.class.getName() + ".MEDIA_TYPES";
|
||||
|
||||
|
||||
private final List<ProduceMediaTypeExpression> expressions;
|
||||
|
||||
@@ -266,8 +268,16 @@ public final class ProducesRequestCondition extends AbstractRequestCondition<Pro
|
||||
}
|
||||
}
|
||||
|
||||
private List<MediaType> getAcceptedMediaTypes(HttpServletRequest request) throws HttpMediaTypeNotAcceptableException {
|
||||
return this.contentNegotiationManager.resolveMediaTypes(new ServletWebRequest(request));
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<MediaType> getAcceptedMediaTypes(HttpServletRequest request)
|
||||
throws HttpMediaTypeNotAcceptableException {
|
||||
|
||||
List<MediaType> result = (List<MediaType>) request.getAttribute(MEDIA_TYPES_ATTRIBUTE);
|
||||
if (result == null) {
|
||||
result = this.contentNegotiationManager.resolveMediaTypes(new ServletWebRequest(request));
|
||||
request.setAttribute(MEDIA_TYPES_ATTRIBUTE, result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private int indexOfEqualMediaType(MediaType mediaType) {
|
||||
|
||||
Reference in New Issue
Block a user