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 e82ce8a6bcf..55963724574 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 @@ -94,7 +94,7 @@ public class RequestedContentTypeResolverBuilder { return exchange -> { for (RequestedContentTypeResolver resolver : resolvers) { List mediaTypes = resolver.resolveMediaTypes(exchange); - if (mediaTypes.equals(RequestedContentTypeResolver.MEDIA_TYPE_ALL_LIST)) { + if (isMediaTypeAll(mediaTypes)) { continue; } return mediaTypes; @@ -103,6 +103,11 @@ public class RequestedContentTypeResolverBuilder { }; } + private boolean isMediaTypeAll(List mediaTypes) { + return mediaTypes.size() == 1 + && mediaTypes.get(0).removeQualityValue().equals(MediaType.ALL); + } + /** * Helper to create and configure {@link ParameterContentTypeResolver}. diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilderTests.java index f4b7dc36fab..f0dccf848b6 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/accept/RequestedContentTypeResolverBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2023 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. @@ -34,8 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class RequestedContentTypeResolverBuilderTests { @Test - public void defaultSettings() throws Exception { - + void defaultSettings() { RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder().build(); MockServerWebExchange exchange = MockServerWebExchange.from( MockServerHttpRequest.get("/flower").accept(MediaType.IMAGE_GIF)); @@ -45,8 +44,7 @@ public class RequestedContentTypeResolverBuilderTests { } @Test - public void parameterResolver() throws Exception { - + void parameterResolver() { RequestedContentTypeResolverBuilder builder = new RequestedContentTypeResolverBuilder(); builder.parameterResolver().mediaType("json", MediaType.APPLICATION_JSON); RequestedContentTypeResolver resolver = builder.build(); @@ -58,8 +56,7 @@ public class RequestedContentTypeResolverBuilderTests { } @Test - public void parameterResolverWithCustomParamName() throws Exception { - + void parameterResolverWithCustomParamName() { RequestedContentTypeResolverBuilder builder = new RequestedContentTypeResolverBuilder(); builder.parameterResolver().mediaType("json", MediaType.APPLICATION_JSON).parameterName("s"); RequestedContentTypeResolver resolver = builder.build(); @@ -71,8 +68,7 @@ public class RequestedContentTypeResolverBuilderTests { } @Test // SPR-10513 - public void fixedResolver() throws Exception { - + void fixedResolver() { RequestedContentTypeResolverBuilder builder = new RequestedContentTypeResolverBuilder(); builder.fixedResolver(MediaType.APPLICATION_JSON); RequestedContentTypeResolver resolver = builder.build(); @@ -84,8 +80,7 @@ public class RequestedContentTypeResolverBuilderTests { } @Test // SPR-12286 - public void resolver() throws Exception { - + void resolver() { RequestedContentTypeResolverBuilder builder = new RequestedContentTypeResolverBuilder(); builder.resolver(new FixedContentTypeResolver(MediaType.APPLICATION_JSON)); RequestedContentTypeResolver resolver = builder.build(); @@ -99,4 +94,17 @@ public class RequestedContentTypeResolverBuilderTests { assertThat(mediaTypes).isEqualTo(Collections.singletonList(MediaType.APPLICATION_JSON)); } + @Test + void removeQualityFactorForMediaTypeAllChecks() { + RequestedContentTypeResolverBuilder builder = new RequestedContentTypeResolverBuilder(); + builder.resolver(new HeaderContentTypeResolver()); + builder.resolver(new FixedContentTypeResolver(MediaType.APPLICATION_JSON)); + RequestedContentTypeResolver resolver = builder.build(); + + MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/") + .accept(MediaType.valueOf("*/*;q=0.8"))); + List mediaTypes = resolver.resolveMediaTypes(exchange); + assertThat(mediaTypes).isEqualTo(Collections.singletonList(MediaType.APPLICATION_JSON)); + } + }