Browse Source

Retain order of produces media types in @⁠ExceptionHandler

Closes gh-35587

Signed-off-by: Igor Murzich <imurzich@gmail.com>
pull/35629/head
Igor Murzich 2 months ago committed by Sam Brannen
parent
commit
7699b4af9c
  1. 4
      spring-web/src/main/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolver.java
  2. 7
      spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java

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

@ -21,7 +21,7 @@ import java.util.ArrayList; @@ -21,7 +21,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -121,7 +121,7 @@ public class ExceptionHandlerMethodResolver { @@ -121,7 +121,7 @@ public class ExceptionHandlerMethodResolver {
if (exceptions.isEmpty()) {
throw new IllegalStateException("No exception types mapped to " + method);
}
Set<MediaType> mediaTypes = new HashSet<>();
Set<MediaType> mediaTypes = new LinkedHashSet<>();
for (String mediaType : exceptionHandler.produces()) {
try {
mediaTypes.add(MediaType.parseMediaType(mediaType));

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

@ -117,6 +117,13 @@ class ExceptionHandlerMethodResolverTests { @@ -117,6 +117,13 @@ class ExceptionHandlerMethodResolverTests {
assertThat(resolver.resolveExceptionMapping(new IllegalArgumentException(), MediaType.TEXT_HTML).getHandlerMethod().getName()).isEqualTo("handleHtml");
}
@Test
void shouldKeepProduceMediaTypesOrder() {
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(MediaTypeController.class);
assertThat(resolver.resolveExceptionMapping(new IllegalArgumentException(), MediaType.TEXT_HTML).getProducibleTypes().toString()).isEqualTo("[text/html, */*]");
}
@Test
void shouldResolveMethodWithCompatibleMediaType() {
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(MediaTypeController.class);

Loading…
Cancel
Save