mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-20 12:19:16 +00:00
Add WebFlux SSE support with GSON
Closes gh-35884
This commit is contained in:
@@ -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
|
||||
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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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> {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user