Use request attribute if available for error message

Fixes gh-1762, gh-1731
This commit is contained in:
Dave Syer 2014-10-27 10:50:10 +00:00
parent e8b59b9e55
commit 7bac7370c8
2 changed files with 13 additions and 1 deletions

View File

@ -75,6 +75,7 @@ public class DefaultErrorAttributes implements ErrorAttributes, HandlerException
private void storeErrorAttributes(HttpServletRequest request, Exception ex) {
request.setAttribute(ERROR_ATTRIBUTE, ex);
}
@Override
@ -120,7 +121,7 @@ public class DefaultErrorAttributes implements ErrorAttributes, HandlerException
addStackTrace(errorAttributes, error);
}
}
else {
if (error==null || errorAttributes.get("message")==null) {
Object message = getAttribute(requestAttributes,
"javax.servlet.error.message");
errorAttributes.put("message", message == null ? "No message available"

View File

@ -118,6 +118,17 @@ public class DefaultErrorAttributesTests {
assertThat(attributes.get("message"), equalTo((Object) "Test"));
}
@Test
public void nullMessage() throws Exception {
this.request.setAttribute("javax.servlet.error.exception", new RuntimeException());
this.request.setAttribute("javax.servlet.error.message", "Test");
Map<String, Object> attributes = this.errorAttributes.getErrorAttributes(
this.requestAttributes, false);
assertThat(attributes.get("exception"),
equalTo((Object) RuntimeException.class.getName()));
assertThat(attributes.get("message"), equalTo((Object) "Test"));
}
@Test
public void unwrapServletException() throws Exception {
RuntimeException ex = new RuntimeException("Test");