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 bc7c28a16d6bd5349dff83b2a94b1a7f2eeab919..5e51124a541516acf6428ce31f54e11e7ae9d4e2 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 7829613ec01ee434c8d1bdbc626f5f5c0fd1bfdd..bbfc4ace300950a498bfd320a0f44de00f81ec94 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);