Commit 7a793a11 authored by Scott Frederick's avatar Scott Frederick

Merge branch '2.2.x' into 2.3.x

Fixes gh-21036 in 2.3.1
parents fdd908d2 0fa1d0ef
...@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
...@@ -51,13 +52,8 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver { ...@@ -51,13 +52,8 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver {
if (this.resolvers == null) { if (this.resolvers == null) {
this.resolvers = extractResolvers(); this.resolvers = extractResolvers();
} }
ModelAndView resolved = this.resolvers.stream() return this.resolvers.stream().map((resolver) -> resolver.resolveException(request, response, handler, ex))
.map((resolver) -> resolver.resolveException(request, response, handler, ex)).filter(Objects::nonNull) .filter(Objects::nonNull).findFirst().orElse(null);
.findFirst().orElse(null);
if (resolved != null && resolved.isEmpty()) {
request.setAttribute("javax.servlet.error.exception", ex);
}
return resolved;
} }
private List<HandlerExceptionResolver> extractResolvers() { private List<HandlerExceptionResolver> extractResolvers() {
...@@ -66,6 +62,7 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver { ...@@ -66,6 +62,7 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver {
list.remove(this); list.remove(this);
AnnotationAwareOrderComparator.sort(list); AnnotationAwareOrderComparator.sort(list);
if (list.isEmpty()) { if (list.isEmpty()) {
list.add(new DefaultErrorAttributes());
list.add(new DefaultHandlerExceptionResolver()); list.add(new DefaultHandlerExceptionResolver());
} }
return list; return list;
......
...@@ -67,7 +67,6 @@ class CompositeHandlerExceptionResolverTests { ...@@ -67,7 +67,6 @@ class CompositeHandlerExceptionResolverTests {
ModelAndView resolved = resolver.resolveException(this.request, this.response, null, exception); ModelAndView resolved = resolver.resolveException(this.request, this.response, null, exception);
assertThat(resolved).isNotNull(); assertThat(resolved).isNotNull();
assertThat(resolved.isEmpty()).isTrue(); assertThat(resolved.isEmpty()).isTrue();
assertThat(this.request.getAttribute("javax.servlet.error.exception")).isSameAs(exception);
} }
private void load(Class<?>... configs) { private void load(Class<?>... configs) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment