Skip to content

Commit e4da7cb

Browse files
committed
Merge branch '5.1.x'
2 parents e131815 + 0109231 commit e4da7cb

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ private DataBuffer encodeValue(Object value, DataBufferFactory bufferFactory, Re
179179
try {
180180
JsonGenerator generator = getObjectMapper().getFactory().createGenerator(outputStream, encoding);
181181
writer.writeValue(generator, value);
182+
generator.flush();
182183
release = false;
183184
}
184185
catch (InvalidDefinitionException ex) {

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,29 @@
1717
package org.springframework.http.codec.json;
1818

1919
import java.nio.charset.StandardCharsets;
20+
import java.time.Duration;
2021
import java.util.Arrays;
2122
import java.util.Collections;
2223
import java.util.Map;
2324

2425
import com.fasterxml.jackson.annotation.JsonTypeInfo;
2526
import com.fasterxml.jackson.annotation.JsonTypeName;
2627
import com.fasterxml.jackson.databind.ObjectMapper;
28+
import com.fasterxml.jackson.databind.SerializationFeature;
2729
import org.junit.Test;
2830
import reactor.core.publisher.Flux;
2931
import reactor.core.publisher.Mono;
32+
import reactor.test.StepVerifier;
3033

3134
import org.springframework.core.ResolvableType;
3235
import org.springframework.core.codec.AbstractEncoderTestCase;
36+
import org.springframework.core.io.buffer.DataBuffer;
3337
import org.springframework.core.io.buffer.DataBufferUtils;
3438
import org.springframework.http.MediaType;
3539
import org.springframework.http.codec.Pojo;
3640
import org.springframework.http.codec.ServerSentEvent;
3741
import org.springframework.util.MimeType;
42+
import org.springframework.util.MimeTypeUtils;
3843

3944
import static java.util.Collections.singletonMap;
4045
import static org.junit.Assert.*;
@@ -85,8 +90,6 @@ public void encode() throws Exception {
8590
.consumeNextWith(expectString("{\"foo\":\"foofoofoo\",\"bar\":\"barbarbar\"}\n"))
8691
.verifyComplete(),
8792
APPLICATION_STREAM_JSON, null);
88-
89-
9093
}
9194

9295
@Test // SPR-15866
@@ -200,6 +203,21 @@ public void classLevelJsonView() {
200203
null, hints);
201204
}
202205

206+
@Test // gh-22771
207+
public void encodeWithFlushAfterWriteOff() {
208+
ObjectMapper mapper = new ObjectMapper();
209+
mapper.configure(SerializationFeature.FLUSH_AFTER_WRITE_VALUE, false);
210+
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(mapper);
211+
212+
Flux<DataBuffer> result = encoder.encode(Flux.just(new Pojo("foo", "bar")), this.bufferFactory,
213+
ResolvableType.forClass(Pojo.class), MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap());
214+
215+
StepVerifier.create(result)
216+
.consumeNextWith(expectString("[{\"foo\":\"foo\",\"bar\":\"bar\"}]"))
217+
.expectComplete()
218+
.verify(Duration.ofSeconds(5));
219+
}
220+
203221

204222
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
205223
private static class ParentClass {

0 commit comments

Comments
 (0)