Skip to content

Commit 6c5ef97

Browse files
committed
Polishing external contribution
See gh-32622
1 parent 3f8a10c commit 6c5ef97

File tree

2 files changed

+28
-36
lines changed

2 files changed

+28
-36
lines changed

Diff for: spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,15 +16,20 @@
1616

1717
package org.springframework.http.codec;
1818

19+
import java.util.List;
20+
import java.util.Map;
21+
1922
import org.apache.commons.logging.Log;
2023
import org.reactivestreams.Publisher;
24+
import reactor.core.publisher.Flux;
25+
import reactor.core.publisher.Mono;
26+
2127
import org.springframework.core.ResolvableType;
2228
import org.springframework.core.codec.AbstractEncoder;
2329
import org.springframework.core.codec.Encoder;
2430
import org.springframework.core.codec.Hints;
2531
import org.springframework.core.io.buffer.DataBuffer;
2632
import org.springframework.core.io.buffer.DataBufferUtils;
27-
import org.springframework.http.HttpHeaders;
2833
import org.springframework.http.HttpLogging;
2934
import org.springframework.http.MediaType;
3035
import org.springframework.http.ReactiveHttpOutputMessage;
@@ -33,11 +38,6 @@
3338
import org.springframework.lang.Nullable;
3439
import org.springframework.util.Assert;
3540
import org.springframework.util.StringUtils;
36-
import reactor.core.publisher.Flux;
37-
import reactor.core.publisher.Mono;
38-
39-
import java.util.List;
40-
import java.util.Map;
4141

4242
/**
4343
* {@code HttpMessageWriter} that wraps and delegates to an {@link Encoder}.
@@ -127,7 +127,7 @@ public Mono<Void> write(Publisher<? extends T> inputStream, ResolvableType eleme
127127
return body
128128
.singleOrEmpty()
129129
.switchIfEmpty(Mono.defer(() -> {
130-
message.getHeaders().remove(HttpHeaders.CONTENT_TYPE);
130+
message.getHeaders().setContentType(null);
131131
message.getHeaders().setContentLength(0);
132132
return message.setComplete().then(Mono.empty());
133133
}))

Diff for: spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java

+20-28
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,33 @@
1616

1717
package org.springframework.http.codec;
1818

19+
import java.lang.reflect.InvocationTargetException;
20+
import java.lang.reflect.Method;
21+
import java.nio.charset.StandardCharsets;
22+
import java.util.Arrays;
23+
import java.util.Collections;
24+
import java.util.List;
25+
import java.util.Map;
26+
1927
import org.junit.jupiter.api.Test;
2028
import org.mockito.ArgumentCaptor;
2129
import org.mockito.Mock;
2230
import org.mockito.junit.jupiter.MockitoSettings;
2331
import org.mockito.quality.Strictness;
32+
import reactor.core.publisher.Flux;
33+
import reactor.core.publisher.Mono;
34+
import reactor.test.StepVerifier;
35+
2436
import org.springframework.core.ResolvableType;
2537
import org.springframework.core.codec.CharSequenceEncoder;
2638
import org.springframework.core.codec.Encoder;
2739
import org.springframework.core.io.buffer.DataBuffer;
2840
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
29-
import org.springframework.http.HttpHeaders;
30-
import org.springframework.http.HttpMethod;
3141
import org.springframework.http.MediaType;
32-
import org.springframework.http.ReactiveHttpOutputMessage;
3342
import org.springframework.util.MimeType;
3443
import org.springframework.util.MimeTypeUtils;
3544
import org.springframework.util.ReflectionUtils;
36-
import org.springframework.web.testfixture.http.client.reactive.MockClientHttpRequest;
3745
import org.springframework.web.testfixture.http.server.reactive.MockServerHttpResponse;
38-
import reactor.core.publisher.Flux;
39-
import reactor.core.publisher.Mono;
40-
import reactor.test.StepVerifier;
41-
42-
import java.lang.reflect.InvocationTargetException;
43-
import java.lang.reflect.Method;
44-
import java.nio.charset.StandardCharsets;
45-
import java.util.Arrays;
46-
import java.util.Collections;
47-
import java.util.List;
48-
import java.util.Map;
4946

5047
import static java.nio.charset.StandardCharsets.ISO_8859_1;
5148
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -205,32 +202,27 @@ void isStreamingMediaType() throws InvocationTargetException, IllegalAccessExcep
205202
}
206203

207204
@Test
208-
public void ifBodyPublisherEmpty_noContentTypeHeader() {
205+
public void noContentTypeWithEmptyBody() {
209206
Encoder<CharSequence> encoder = CharSequenceEncoder.textPlainOnly();
210-
EncoderHttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder);
211-
ReactiveHttpOutputMessage outputMessage = new MockClientHttpRequest(HttpMethod.POST, "/");
207+
HttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder);
212208
Mono<Void> writerMono = writer.write(Mono.empty(), ResolvableType.forClass(String.class),
213-
null, outputMessage, NO_HINTS);
209+
null, this.response, NO_HINTS);
214210

215211
StepVerifier.create(writerMono)
216212
.verifyComplete();
217-
assertThat(outputMessage.getHeaders()).doesNotContainKey(HttpHeaders.CONTENT_TYPE);
213+
assertThat(response.getHeaders().getContentType()).isNull();
218214
}
219215

220216
@Test
221-
public void ifBodyPublisherEmpty_contentLengthZero() {
217+
public void zeroContentLengthWithEmptyBody() {
222218
Encoder<CharSequence> encoder = CharSequenceEncoder.textPlainOnly();
223-
EncoderHttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder);
224-
ReactiveHttpOutputMessage outputMessage = new MockClientHttpRequest(HttpMethod.POST, "/");
219+
HttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder);
225220
Mono<Void> writerMono = writer.write(Mono.empty(), ResolvableType.forClass(String.class),
226-
null, outputMessage, NO_HINTS);
221+
null, this.response, NO_HINTS);
227222

228223
StepVerifier.create(writerMono)
229224
.verifyComplete();
230-
List<String> contentLengthValues = outputMessage.getHeaders().get(HttpHeaders.CONTENT_LENGTH);
231-
assertThat(contentLengthValues).hasSize(1);
232-
int contentLength = Integer.parseInt(contentLengthValues.get(0));
233-
assertThat(contentLength).isEqualTo(0);
225+
assertThat(this.response.getHeaders().getContentLength()).isEqualTo(0);
234226
}
235227

236228
private void configureEncoder(MimeType... mimeTypes) {

0 commit comments

Comments
 (0)