Skip to content

Commit 7699b4a

Browse files
IMurzichsbrannen
authored andcommitted
Retain order of produces media types in @⁠ExceptionHandler
Closes gh-35587 Signed-off-by: Igor Murzich <[email protected]>
1 parent 6c5de48 commit 7699b4a

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

spring-web/src/main/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import java.util.Arrays;
2222
import java.util.Comparator;
2323
import java.util.HashMap;
24-
import java.util.HashSet;
24+
import java.util.LinkedHashSet;
2525
import java.util.List;
2626
import java.util.Map;
2727
import java.util.Set;
@@ -121,7 +121,7 @@ private ExceptionHandlerMappingInfo detectExceptionMappings(Method method) {
121121
if (exceptions.isEmpty()) {
122122
throw new IllegalStateException("No exception types mapped to " + method);
123123
}
124-
Set<MediaType> mediaTypes = new HashSet<>();
124+
Set<MediaType> mediaTypes = new LinkedHashSet<>();
125125
for (String mediaType : exceptionHandler.produces()) {
126126
try {
127127
mediaTypes.add(MediaType.parseMediaType(mediaType));

spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ void shouldResolveMethodWithMediaType() {
117117
assertThat(resolver.resolveExceptionMapping(new IllegalArgumentException(), MediaType.TEXT_HTML).getHandlerMethod().getName()).isEqualTo("handleHtml");
118118
}
119119

120+
@Test
121+
void shouldKeepProduceMediaTypesOrder() {
122+
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(MediaTypeController.class);
123+
assertThat(resolver.resolveExceptionMapping(new IllegalArgumentException(), MediaType.TEXT_HTML).getProducibleTypes().toString()).isEqualTo("[text/html, */*]");
124+
}
125+
126+
120127
@Test
121128
void shouldResolveMethodWithCompatibleMediaType() {
122129
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(MediaTypeController.class);

0 commit comments

Comments
 (0)