Align BasicErrorController’s HTML response status with non-HTML status

Previously, BasicErrorController would return the response status
set in the javax.servlet.error.status_code request attribute when
serving JSON but would also return a 200 OK response when serving
HTML. This didn’t cause much trouble when a person was browsing, but
proved problematic for machine clients that request text/html and care
about the response status. For example, the success handler would be
driven for an XHR request even though the response was really an error.

This commit updates BasicErrorController to set the response status for
text/html responses to match the status that it would use in an
application/json response.

Closes gh-4694
This commit is contained in:
Andy Wilkinson
2015-12-10 13:40:16 +00:00
parent b36fe2cbd8
commit ce541bebcf
5 changed files with 11 additions and 8 deletions

View File

@@ -89,7 +89,7 @@ public class SampleActuatorUiApplicationTests {
ResponseEntity<String> entity = new TestRestTemplate().exchange(
"http://localhost:" + this.port + "/error", HttpMethod.GET,
new HttpEntity<Void>(headers), String.class);
assertEquals(HttpStatus.OK, entity.getStatusCode());
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, entity.getStatusCode());
assertTrue("Wrong body:\n" + entity.getBody(),
entity.getBody().contains("<html>"));
assertTrue("Wrong body:\n" + entity.getBody(),