diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java index 62dbbd402a..345617df91 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @@ -51,13 +52,8 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver { if (this.resolvers == null) { this.resolvers = extractResolvers(); } - ModelAndView resolved = this.resolvers.stream() - .map((resolver) -> resolver.resolveException(request, response, handler, ex)).filter(Objects::nonNull) - .findFirst().orElse(null); - if (resolved != null && resolved.isEmpty()) { - request.setAttribute("javax.servlet.error.exception", ex); - } - return resolved; + return this.resolvers.stream().map((resolver) -> resolver.resolveException(request, response, handler, ex)) + .filter(Objects::nonNull).findFirst().orElse(null); } private List extractResolvers() { @@ -66,6 +62,7 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver { list.remove(this); AnnotationAwareOrderComparator.sort(list); if (list.isEmpty()) { + list.add(new DefaultErrorAttributes()); list.add(new DefaultHandlerExceptionResolver()); } return list; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolverTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolverTests.java index 129d7dd462..f78843a96e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolverTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolverTests.java @@ -67,7 +67,6 @@ class CompositeHandlerExceptionResolverTests { ModelAndView resolved = resolver.resolveException(this.request, this.response, null, exception); assertThat(resolved).isNotNull(); assertThat(resolved.isEmpty()).isTrue(); - assertThat(this.request.getAttribute("javax.servlet.error.exception")).isSameAs(exception); } private void load(Class... configs) {