From 1fea52cf4b24339b09d1f27309bff56717a07e0c Mon Sep 17 00:00:00 2001 From: hyunmin0317 Date: Tue, 20 Aug 2024 22:44:24 +0900 Subject: [PATCH] Refactor eTag formatting logic into a static utility method --- .../main/java/org/springframework/http/ETag.java | 9 +++++++++ .../org/springframework/http/ResponseEntity.java | 7 +------ .../server/DefaultEntityResponseBuilder.java | 15 ++------------- .../server/DefaultServerResponseBuilder.java | 15 ++------------- .../function/DefaultEntityResponseBuilder.java | 16 ++-------------- .../function/DefaultServerResponseBuilder.java | 13 ++----------- 6 files changed, 18 insertions(+), 57 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/ETag.java b/spring-web/src/main/java/org/springframework/http/ETag.java index 6f7027b5ef0d..be2ded98918d 100644 --- a/spring-web/src/main/java/org/springframework/http/ETag.java +++ b/spring-web/src/main/java/org/springframework/http/ETag.java @@ -134,6 +134,15 @@ public static List parse(String source) { return result; } + public static String format(String etag) { + if (!etag.startsWith("\"") && !etag.startsWith("W/\"")) { + etag = "\"" + etag; + } + if (!etag.endsWith("\"")) { + etag = etag + "\""; + } + return etag; + } private enum State { 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 350e11a2aba0..8ab005e29359 100644 --- a/spring-web/src/main/java/org/springframework/http/ResponseEntity.java +++ b/spring-web/src/main/java/org/springframework/http/ResponseEntity.java @@ -570,12 +570,7 @@ public BodyBuilder contentType(MediaType contentType) { @Override public BodyBuilder eTag(@Nullable String etag) { if (etag != null) { - if (!etag.startsWith("\"") && !etag.startsWith("W/\"")) { - etag = "\"" + etag; - } - if (!etag.endsWith("\"")) { - etag = etag + "\""; - } + etag = ETag.format(etag); } this.headers.setETag(etag); return this; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java index 87697d0da1ef..7722c53eb130 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilder.java @@ -28,16 +28,10 @@ import java.util.Set; import java.util.function.Consumer; +import org.springframework.http.*; import reactor.core.publisher.Mono; import org.springframework.core.codec.Hints; -import org.springframework.http.CacheControl; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.HttpStatusCode; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseCookie; import org.springframework.http.codec.HttpMessageWriter; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; @@ -148,12 +142,7 @@ public EntityResponse.Builder contentType(MediaType contentType) { @Override public EntityResponse.Builder eTag(String etag) { - if (!etag.startsWith("\"") && !etag.startsWith("W/\"")) { - etag = "\"" + etag; - } - if (!etag.endsWith("\"")) { - etag = etag + "\""; - } + etag = ETag.format(etag); this.headers.setETag(etag); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java index 9f0df3b736de..4c3e2254f491 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java @@ -32,17 +32,11 @@ import java.util.function.Function; import org.reactivestreams.Publisher; +import org.springframework.http.*; import reactor.core.publisher.Mono; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.codec.Hints; -import org.springframework.http.CacheControl; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatusCode; -import org.springframework.http.MediaType; -import org.springframework.http.ReactiveHttpOutputMessage; -import org.springframework.http.ResponseCookie; import org.springframework.http.codec.HttpMessageWriter; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; @@ -148,12 +142,7 @@ public ServerResponse.BodyBuilder contentType(MediaType contentType) { @Override public ServerResponse.BodyBuilder eTag(String etag) { Assert.notNull(etag, "etag must not be null"); - if (!etag.startsWith("\"") && !etag.startsWith("W/\"")) { - etag = "\"" + etag; - } - if (!etag.endsWith("\"")) { - etag = etag + "\""; - } + etag = ETag.format(etag); this.headers.setETag(etag); return this; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java index 135792c052f8..e44cd3131ae9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java @@ -45,14 +45,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourceRegion; -import org.springframework.http.CacheControl; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpRange; -import org.springframework.http.HttpStatus; -import org.springframework.http.HttpStatusCode; -import org.springframework.http.InvalidMediaTypeException; -import org.springframework.http.MediaType; +import org.springframework.http.*; import org.springframework.http.converter.GenericHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.SmartHttpMessageConverter; @@ -166,12 +159,7 @@ public EntityResponse.Builder contentType(MediaType contentType) { @Override public EntityResponse.Builder eTag(String etag) { - if (!etag.startsWith("\"") && !etag.startsWith("W/\"")) { - etag = "\"" + etag; - } - if (!etag.endsWith("\"")) { - etag = etag + "\""; - } + etag = ETag.format(etag); this.headers.setETag(etag); return this; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java index 54f5e83ff3d3..d5611d19c5fb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java @@ -30,11 +30,7 @@ import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.CacheControl; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatusCode; -import org.springframework.http.MediaType; +import org.springframework.http.*; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; @@ -128,12 +124,7 @@ public ServerResponse.BodyBuilder contentType(MediaType contentType) { @Override public ServerResponse.BodyBuilder eTag(String etag) { Assert.notNull(etag, "etag must not be null"); - if (!etag.startsWith("\"") && !etag.startsWith("W/\"")) { - etag = "\"" + etag; - } - if (!etag.endsWith("\"")) { - etag = etag + "\""; - } + etag = ETag.format(etag); this.headers.setETag(etag); return this; }