From c0429dbb091452f9f7476d7a3c40c0cceb1095c5 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 5 Nov 2025 10:48:24 +0100 Subject: [PATCH] Fix file extension resolution for media types with q parameter Prior to this commit, the `MappingMediaTypeFileExtensionResolver` would resolve file extensions for a given media type by using a direct lookup using the given media type provided by the request. If the request contains a quality parameter like "application/json;q=0.9", this would not resolve configured file extensions for this media type. While other media type parameters can be meaningful, the quality parameter should not be used for lookups. This commit ensures that the quality parameter is dropped before performing lookups. Fixes gh-35754 --- .../web/accept/MappingMediaTypeFileExtensionResolver.java | 2 +- .../MappingMediaTypeFileExtensionResolverTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolver.java b/spring-web/src/main/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolver.java index bb379820e7e..6e4fce65956 100644 --- a/spring-web/src/main/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolver.java +++ b/spring-web/src/main/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolver.java @@ -94,7 +94,7 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten @Override public List resolveFileExtensions(MediaType mediaType) { - List fileExtensions = this.fileExtensions.get(mediaType); + List fileExtensions = this.fileExtensions.get(mediaType.removeQualityValue()); return (fileExtensions != null ? fileExtensions : Collections.emptyList()); } diff --git a/spring-web/src/test/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolverTests.java b/spring-web/src/test/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolverTests.java index 5d954e9126e..9b57668e739 100644 --- a/spring-web/src/test/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolverTests.java @@ -53,6 +53,14 @@ class MappingMediaTypeFileExtensionResolverTests { .resolveFileExtensions(MediaType.TEXT_HTML)).isEmpty(); } + @Test + void resolveExtensionsWithQualityParameter() { + List extensions = new MappingMediaTypeFileExtensionResolver(DEFAULT_MAPPINGS) + .resolveFileExtensions(MediaType.parseMediaType("application/json;q=0.9")); + + assertThat(extensions).containsExactly("json"); + } + @Test // SPR-13747 public void lookupMediaTypeCaseInsensitive() { assertThat(new MappingMediaTypeFileExtensionResolver(DEFAULT_MAPPINGS).lookupMediaType("JSON"))