diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/GsonEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/GsonEncoder.java index 5066e8fabf8..7ce4130ee31 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/GsonEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/GsonEncoder.java @@ -37,6 +37,7 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.http.MediaType; import org.springframework.http.codec.HttpMessageEncoder; +import org.springframework.http.codec.ServerSentEvent; import org.springframework.util.Assert; import org.springframework.util.FastByteArrayOutputStream; import org.springframework.util.MimeType; @@ -106,7 +107,8 @@ public class GsonEncoder extends AbstractEncoder implements HttpMessageE if (!super.canEncode(elementType, mimeType)) { return false; } - return !String.class.isAssignableFrom(elementType.toClass()); + Class elementClass = elementType.toClass(); + return !(String.class.isAssignableFrom(elementClass) || ServerSentEvent.class.isAssignableFrom(elementClass)); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/codec/support/ServerDefaultCodecsImpl.java b/spring-web/src/main/java/org/springframework/http/codec/support/ServerDefaultCodecsImpl.java index 2275e6e897f..6f299098150 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/support/ServerDefaultCodecsImpl.java +++ b/spring-web/src/main/java/org/springframework/http/codec/support/ServerDefaultCodecsImpl.java @@ -58,6 +58,7 @@ class ServerDefaultCodecsImpl extends BaseDefaultCodecs implements ServerCodecCo private @Nullable Encoder getSseEncoder() { return this.sseEncoder != null ? this.sseEncoder : (JACKSON_PRESENT || JACKSON_2_PRESENT) ? getJacksonJsonEncoder() : + GSON_PRESENT ? getGsonEncoder() : KOTLIN_SERIALIZATION_JSON_PRESENT ? getKotlinSerializationJsonEncoder() : null; } diff --git a/spring-web/src/test/java/org/springframework/http/codec/json/GsonEncoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/json/GsonEncoderTests.java index 9fdbe138300..170f023e159 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/json/GsonEncoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/json/GsonEncoderTests.java @@ -23,6 +23,7 @@ import reactor.test.StepVerifier; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.testfixture.codec.AbstractEncoderTests; +import org.springframework.http.codec.ServerSentEvent; import org.springframework.web.testfixture.xml.Pojo; import static org.assertj.core.api.Assertions.assertThat; @@ -42,7 +43,8 @@ class GsonEncoderTests extends AbstractEncoderTests { assertThat(this.encoder.canEncode(pojoType, APPLICATION_JSON)).isTrue(); assertThat(this.encoder.canEncode(pojoType, APPLICATION_NDJSON)).isTrue(); assertThat(this.encoder.canEncode(pojoType, null)).isTrue(); - + assertThat(this.encoder.canEncode(ResolvableType.forClass(ServerSentEvent.class), null)).isFalse(); + assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isFalse(); } @Test