Improve DateHeaders in MockServletRequest/Response
Prior to this change, calling the `setDateHeader` method on a
Spring Test MockHttpServletResponse instance would just store the given
long value in a Map, not writing it as a formatted date String.
Also, calling `getDateHeader` on a MockHttpServletRequest would not
support date strings and could not parse those values.
This can be problematic when testing features related to date headers
such as "Expires", "If-Modified-Since", "Last-Modified", etc.
This commit adds formatting and parsing capabilities to Servlet Mocks
for date strings in HTTP headers.
When formatting dates to Strings, the date format used is the one
preferred by the HTTP RFC. When parsing date Strings, multiple date
formats are supported for better compatibility.
Issue: SPR-11912
@ -120,6 +124,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -120,6 +124,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -681,7 +697,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -681,7 +697,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -699,7 +715,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -699,7 +715,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -728,7 +744,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -728,7 +744,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -860,20 +876,16 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -860,20 +876,16 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -902,6 +914,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -902,6 +914,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -912,15 +936,32 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -912,15 +936,32 @@ public class MockHttpServletRequest implements HttpServletRequest {
elseif(valueinstanceofNumber){
return((Number)value).longValue();
}
elseif(valueinstanceofString){
returnparseDateHeader(name,(String)value);
}
elseif(value!=null){
thrownewIllegalArgumentException(
"Value for header '"+name+"' is neither a Date nor a Number: "+value);
"Value for header '"+name+"' is not a Date, Number, or String: "+value);
@ -1171,7 +1212,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -1171,7 +1212,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -59,6 +64,10 @@ public class MockHttpServletResponse implements HttpServletResponse {
@@ -59,6 +64,10 @@ public class MockHttpServletResponse implements HttpServletResponse {
@ -481,12 +490,18 @@ public class MockHttpServletResponse implements HttpServletResponse {
@@ -481,12 +490,18 @@ public class MockHttpServletResponse implements HttpServletResponse {
@ -120,6 +124,17 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -120,6 +124,17 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -860,20 +875,16 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -860,20 +875,16 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -902,6 +913,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -902,6 +913,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@ -912,15 +935,32 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -912,15 +935,32 @@ public class MockHttpServletRequest implements HttpServletRequest {
elseif(valueinstanceofNumber){
return((Number)value).longValue();
}
elseif(valueinstanceofString){
returnparseDateHeader(name,(String)value);
}
elseif(value!=null){
thrownewIllegalArgumentException(
"Value for header '"+name+"' is neither a Date nor a Number: "+value);
"Value for header '"+name+"' is not a Date, Number, or String: "+value);
@ -1171,7 +1211,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@@ -1171,7 +1211,7 @@ public class MockHttpServletRequest implements HttpServletRequest {