ProducesRequestCondition caches accepted media types

Closes gh-22644
This commit is contained in:
Rossen Stoyanchev
2019-04-03 14:55:51 -04:00
parent 254f06e1a1
commit 72119ac076
4 changed files with 23 additions and 4 deletions

View File

@@ -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) {