diff --git a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java index 493a1aabfc..381e72bcc3 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java @@ -244,11 +244,15 @@ public class ServletWebRequest extends ServletRequestAttributes implements Nativ private boolean isCompatibleWithConditionalRequests(HttpServletResponse response) { - if (response == null || !servlet3Present) { - // Can't check response.getStatus() - let's assume we're good + try { + if (response == null || !servlet3Present) { + // Can't check response.getStatus() - let's assume we're good + return true; + } + return HttpStatus.valueOf(response.getStatus()).is2xxSuccessful(); + } catch (IllegalArgumentException e) { return true; } - return HttpStatus.valueOf(response.getStatus()).is2xxSuccessful(); } private boolean isHeaderAbsent(HttpServletResponse response, String header) { diff --git a/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java b/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java index 0d615a7e46..3832ae3a0b 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java @@ -87,6 +87,18 @@ public class ServletWebRequestHttpMethodsTests { assertNull(servletResponse.getHeader("Last-Modified")); } + // SPR-13516 + @Test + public void checkNotModifiedInvalidStatus() { + long epochTime = currentDate.getTime(); + servletRequest.addHeader("If-Modified-Since", epochTime); + servletResponse.setStatus(0); + + assertTrue(request.checkNotModified(epochTime)); + assertEquals(304, servletResponse.getStatus()); + assertEquals(dateFormat.format(epochTime), servletResponse.getHeader("Last-Modified")); + } + @Test public void checkNotModifiedHeaderAlreadySet() { long epochTime = currentDate.getTime();