Browse Source

Add WebFlux SSE support with GSON

Closes gh-35884
pull/35899/head
Sébastien Deleuze 3 weeks ago
parent
commit
f3908832c5
  1. 4
      spring-web/src/main/java/org/springframework/http/codec/json/GsonEncoder.java
  2. 1
      spring-web/src/main/java/org/springframework/http/codec/support/ServerDefaultCodecsImpl.java
  3. 4
      spring-web/src/test/java/org/springframework/http/codec/json/GsonEncoderTests.java

4
spring-web/src/main/java/org/springframework/http/codec/json/GsonEncoder.java

@ -37,6 +37,7 @@ import org.springframework.core.io.buffer.DataBuffer; @@ -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<Object> implements HttpMessageE @@ -106,7 +107,8 @@ public class GsonEncoder extends AbstractEncoder<Object> 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

1
spring-web/src/main/java/org/springframework/http/codec/support/ServerDefaultCodecsImpl.java

@ -58,6 +58,7 @@ class ServerDefaultCodecsImpl extends BaseDefaultCodecs implements ServerCodecCo @@ -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;
}

4
spring-web/src/test/java/org/springframework/http/codec/json/GsonEncoderTests.java

@ -23,6 +23,7 @@ import reactor.test.StepVerifier; @@ -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<GsonEncoder> { @@ -42,7 +43,8 @@ class GsonEncoderTests extends AbstractEncoderTests<GsonEncoder> {
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

Loading…
Cancel
Save