Dmitry Katsubo opened SPR-16312 and commented
MockHttpServletRequest has this:
private static final String[] DATE_FORMATS = new String[] {
"EEE, dd MMM yyyy HH:mm:ss zzz",
"EEE, dd-MMM-yy HH:mm:ss zzz",
"EEE MMM dd HH:mm:ss yyyy"
};
MockHttpServletResponse has this:
private static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz";
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
HttpHeaders has this:
private static final DateTimeFormatter[] DATE_FORMATTERS = new DateTimeFormatter[] {
DateTimeFormatter.RFC_1123_DATE_TIME,
DateTimeFormatter.ofPattern("EEEE, dd-MMM-yy HH:mm:ss zz", Locale.US),
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss yyyy",Locale.US).withZone(GMT)
};
To optimize above:
* HttpHeaders is added addDate(String headerName, long date) method.
* MockHttpServletResponse delegates setDateHeader(String name, long value) and addDateHeader(String name, long value) to HttpHeaders#setDate() / HttpHeaders#addDate() correspondingly.
* MockHttpServletRequest delegates getDateHeader(String name) to HttpHeaders#getFirstZonedDateTime(String headerName, boolean rejectInvalid).
Affects: 5.0.1
Issue Links: - #16531 MockHttpServletResponse.setDateHeader does not perform date formatting
1 votes, 3 watchers
Comment From: bclozel
MockHttpServletRequest and MockHttpServletResponse do not hold HttpHeaders instances but Map<String, HeaderValueHolder>. This is by design, as header values can be String, Date or Number. Relying on HttpHeaders for those operations is not possible as a result.