From 583435d068a8a09d1fe72d3191028ab83320ccdb Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Sat, 25 Apr 2020 07:33:30 +0100 Subject: [PATCH] Consistent ordering in MethodNotAllowedException This caused random failures in a newly added test. Also remove defensive check in ResponseStatusExceptionResolver. See gh-24944 --- .../web/server/MethodNotAllowedException.java | 4 ++-- .../mvc/annotation/ResponseStatusExceptionResolver.java | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/server/MethodNotAllowedException.java b/spring-web/src/main/java/org/springframework/web/server/MethodNotAllowedException.java index 40cf7d46607..e6e78dd8836 100644 --- a/spring-web/src/main/java/org/springframework/web/server/MethodNotAllowedException.java +++ b/spring-web/src/main/java/org/springframework/web/server/MethodNotAllowedException.java @@ -18,7 +18,7 @@ package org.springframework.web.server; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -54,7 +54,7 @@ public class MethodNotAllowedException extends ResponseStatusException { supportedMethods = Collections.emptySet(); } this.method = method; - this.httpMethods = Collections.unmodifiableSet(new HashSet<>(supportedMethods)); + this.httpMethods = Collections.unmodifiableSet(new LinkedHashSet<>(supportedMethods)); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java index 5d8d40a5e3c..63873d01ff6 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java @@ -130,11 +130,8 @@ public class ResponseStatusExceptionResolver extends AbstractHandlerExceptionRes protected ModelAndView resolveResponseStatusException(ResponseStatusException ex, HttpServletRequest request, HttpServletResponse response, @Nullable Object handler) throws Exception { - ex.getResponseHeaders().forEach((name, values) -> { - if (response.getHeader(name) == null) { - values.forEach(value -> response.addHeader(name, value)); - } - }); + ex.getResponseHeaders().forEach((name, values) -> + values.forEach(value -> response.addHeader(name, value))); int statusCode = ex.getStatus().value(); String reason = ex.getReason();