Stream custom types in Jackson2JsonEncoder
Issue: SPR-15727
This commit is contained in:
parent
9901c38f9d
commit
727ca4514a
|
|
@ -124,7 +124,7 @@ public class Jackson2JsonEncoder extends Jackson2CodecSupport implements HttpMes
|
||||||
return Flux.from(inputStream).map(value ->
|
return Flux.from(inputStream).map(value ->
|
||||||
encodeValue(value, mimeType, bufferFactory, elementType, hints));
|
encodeValue(value, mimeType, bufferFactory, elementType, hints));
|
||||||
}
|
}
|
||||||
else if (MediaType.APPLICATION_STREAM_JSON.isCompatibleWith(mimeType)) {
|
else if (this.streamingMediaTypes.stream().anyMatch(streamingMediaType -> streamingMediaType.isCompatibleWith(mimeType))) {
|
||||||
return Flux.from(inputStream).map(value -> {
|
return Flux.from(inputStream).map(value -> {
|
||||||
DataBuffer buffer = encodeValue(value, mimeType, bufferFactory, elementType, hints);
|
DataBuffer buffer = encodeValue(value, mimeType, bufferFactory, elementType, hints);
|
||||||
buffer.write(new byte[]{'\n'});
|
buffer.write(new byte[]{'\n'});
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package org.springframework.http.codec.json;
|
package org.springframework.http.codec.json;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
|
@ -32,6 +33,7 @@ import reactor.test.StepVerifier;
|
||||||
import org.springframework.core.ResolvableType;
|
import org.springframework.core.ResolvableType;
|
||||||
import org.springframework.core.io.buffer.AbstractDataBufferAllocatingTestCase;
|
import org.springframework.core.io.buffer.AbstractDataBufferAllocatingTestCase;
|
||||||
import org.springframework.core.io.buffer.DataBuffer;
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.codec.Pojo;
|
import org.springframework.http.codec.Pojo;
|
||||||
import org.springframework.http.codec.ServerSentEvent;
|
import org.springframework.http.codec.ServerSentEvent;
|
||||||
|
|
||||||
|
|
@ -108,6 +110,26 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa
|
||||||
.verifyComplete();
|
.verifyComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test // SPR-15727
|
||||||
|
public void encodeAsStreamWithCustomStreamingType() throws Exception {
|
||||||
|
MediaType fooMediaType = new MediaType("application", "foo");
|
||||||
|
MediaType barMediaType = new MediaType("application", "bar");
|
||||||
|
this.encoder.setStreamingMediaTypes(Arrays.asList(fooMediaType, barMediaType));
|
||||||
|
Flux<Pojo> source = Flux.just(
|
||||||
|
new Pojo("foo", "bar"),
|
||||||
|
new Pojo("foofoo", "barbar"),
|
||||||
|
new Pojo("foofoofoo", "barbarbar")
|
||||||
|
);
|
||||||
|
ResolvableType type = ResolvableType.forClass(Pojo.class);
|
||||||
|
Flux<DataBuffer> output = this.encoder.encode(source, this.bufferFactory, type, barMediaType, emptyMap());
|
||||||
|
|
||||||
|
StepVerifier.create(output)
|
||||||
|
.consumeNextWith(stringConsumer("{\"foo\":\"foo\",\"bar\":\"bar\"}\n"))
|
||||||
|
.consumeNextWith(stringConsumer("{\"foo\":\"foofoo\",\"bar\":\"barbar\"}\n"))
|
||||||
|
.consumeNextWith(stringConsumer("{\"foo\":\"foofoofoo\",\"bar\":\"barbarbar\"}\n"))
|
||||||
|
.verifyComplete();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void fieldLevelJsonView() throws Exception {
|
public void fieldLevelJsonView() throws Exception {
|
||||||
JacksonViewBean bean = new JacksonViewBean();
|
JacksonViewBean bean = new JacksonViewBean();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue