From 9abd4ed33d009d6cfc7cc1e3600bb8433c25860a Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Thu, 6 Dec 2018 01:38:16 +0100 Subject: [PATCH] Allow Instant and ZonedDateTime as Last-Modified header. Issues: SPR-17571 --- .../org/springframework/http/HttpHeaders.java | 25 +++++++++++++++ .../springframework/http/ResponseEntity.java | 32 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index bc7c28a16d..5e51124a54 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -1145,6 +1145,22 @@ public class HttpHeaders implements MultiValueMap, Serializable setDate(LAST_MODIFIED, lastModified); } + /** + * Set the time the resource was last changed, as specified by the + * {@code Last-Modified} header. + */ + public void setLastModified(Instant lastModified) { + setInstant(LAST_MODIFIED, lastModified); + } + + /** + * Set the time the resource was last changed, as specified by the + * {@code Last-Modified} header. + */ + public void setLastModified(ZonedDateTime lastModified) { + setZonedDateTime(LAST_MODIFIED, lastModified); + } + /** * Return the time the resource was last changed, as specified by the * {@code Last-Modified} header. @@ -1266,6 +1282,15 @@ public class HttpHeaders implements MultiValueMap, Serializable set(headerName, DATE_FORMATTERS[0].format(date)); } + /** + * Set the given date under the given header name after formatting it as a string + * using the RFC-1123 date-time formatter. The equivalent of + * {@link #set(String, String)} but for date headers. + */ + public void setInstant(String headerName, Instant date) { + setZonedDateTime(headerName, ZonedDateTime.ofInstant(date, GMT)); + } + /** * Set the given date under the given header name after formatting it as a string * using the RFC-1123 date-time formatter. The equivalent of diff --git a/spring-web/src/main/java/org/springframework/http/ResponseEntity.java b/spring-web/src/main/java/org/springframework/http/ResponseEntity.java index 7829613ec0..bbfc4ace30 100644 --- a/spring-web/src/main/java/org/springframework/http/ResponseEntity.java +++ b/spring-web/src/main/java/org/springframework/http/ResponseEntity.java @@ -17,6 +17,8 @@ package org.springframework.http; import java.net.URI; +import java.time.Instant; +import java.time.ZonedDateTime; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Optional; @@ -359,6 +361,24 @@ public class ResponseEntity extends HttpEntity { */ B lastModified(long lastModified); + /** + * Set the time the resource was last changed, as specified by the + * {@code Last-Modified} header. + * @param lastModified the last modified date + * @return this builder + * @see HttpHeaders#setLastModified(long) + */ + B lastModified(ZonedDateTime lastModified); + + /** + * Set the time the resource was last changed, as specified by the + * {@code Last-Modified} header. + * @param lastModified the last modified date + * @return this builder + * @see HttpHeaders#setLastModified(long) + */ + B lastModified(Instant lastModified); + /** * Set the location of a resource, as specified by the {@code Location} header. * @param location the location @@ -495,6 +515,18 @@ public class ResponseEntity extends HttpEntity { return this; } + @Override + public BodyBuilder lastModified(ZonedDateTime date) { + this.headers.setLastModified(date); + return this; + } + + @Override + public BodyBuilder lastModified(Instant date) { + this.headers.setLastModified(date); + return this; + } + @Override public BodyBuilder location(URI location) { this.headers.setLocation(location); -- GitLab