Browse Source

Merge pull request #32622 from NadChel:bugfix/GH-32620_remove_content_type_if_no_body

* gh-32622:
  Polishing external contribution
  Remove Content-Type when body is empty
pull/32696/head
Arjen Poutsma 2 years ago
parent
commit
df41bb1ae9
  1. 3
      spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java
  2. 26
      spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java

3
spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2022 the original author or authors. * Copyright 2002-2024 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -127,6 +127,7 @@ public class EncoderHttpMessageWriter<T> implements HttpMessageWriter<T> {
return body return body
.singleOrEmpty() .singleOrEmpty()
.switchIfEmpty(Mono.defer(() -> { .switchIfEmpty(Mono.defer(() -> {
message.getHeaders().setContentType(null);
message.getHeaders().setContentLength(0); message.getHeaders().setContentLength(0);
return message.setComplete().then(Mono.empty()); return message.setComplete().then(Mono.empty());
})) }))

26
spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java

@ -33,7 +33,9 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.test.StepVerifier; import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.CharSequenceEncoder; import org.springframework.core.codec.CharSequenceEncoder;
import org.springframework.core.codec.Encoder;
import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -199,6 +201,30 @@ class EncoderHttpMessageWriterTests {
assertThat((Boolean) method.invoke(writer, TEXT_HTML)).isFalse(); assertThat((Boolean) method.invoke(writer, TEXT_HTML)).isFalse();
} }
@Test
public void noContentTypeWithEmptyBody() {
Encoder<CharSequence> encoder = CharSequenceEncoder.textPlainOnly();
HttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder);
Mono<Void> writerMono = writer.write(Mono.empty(), ResolvableType.forClass(String.class),
null, this.response, NO_HINTS);
StepVerifier.create(writerMono)
.verifyComplete();
assertThat(response.getHeaders().getContentType()).isNull();
}
@Test
public void zeroContentLengthWithEmptyBody() {
Encoder<CharSequence> encoder = CharSequenceEncoder.textPlainOnly();
HttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder);
Mono<Void> writerMono = writer.write(Mono.empty(), ResolvableType.forClass(String.class),
null, this.response, NO_HINTS);
StepVerifier.create(writerMono)
.verifyComplete();
assertThat(this.response.getHeaders().getContentLength()).isEqualTo(0);
}
private void configureEncoder(MimeType... mimeTypes) { private void configureEncoder(MimeType... mimeTypes) {
configureEncoder(Flux.empty(), mimeTypes); configureEncoder(Flux.empty(), mimeTypes);
} }

Loading…
Cancel
Save