Skip to content

Commit c0429db

Browse files
committed
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
1 parent d65de19 commit c0429db

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

spring-web/src/main/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ private void addFileExtension(MediaType mediaType, String extension) {
9494

9595
@Override
9696
public List<String> resolveFileExtensions(MediaType mediaType) {
97-
List<String> fileExtensions = this.fileExtensions.get(mediaType);
97+
List<String> fileExtensions = this.fileExtensions.get(mediaType.removeQualityValue());
9898
return (fileExtensions != null ? fileExtensions : Collections.emptyList());
9999
}
100100

spring-web/src/test/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolverTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ void resolveExtensionsNoMatch() {
5353
.resolveFileExtensions(MediaType.TEXT_HTML)).isEmpty();
5454
}
5555

56+
@Test
57+
void resolveExtensionsWithQualityParameter() {
58+
List<String> extensions = new MappingMediaTypeFileExtensionResolver(DEFAULT_MAPPINGS)
59+
.resolveFileExtensions(MediaType.parseMediaType("application/json;q=0.9"));
60+
61+
assertThat(extensions).containsExactly("json");
62+
}
63+
5664
@Test // SPR-13747
5765
public void lookupMediaTypeCaseInsensitive() {
5866
assertThat(new MappingMediaTypeFileExtensionResolver(DEFAULT_MAPPINGS).lookupMediaType("JSON"))

0 commit comments

Comments
 (0)