Fix canWrite of PartHttpMessageWriter

See gh-29631
This commit is contained in:
CoderYellow 2022-12-04 16:54:57 +08:00 committed by rstoyanchev
parent 7899fa3b0a
commit a7bf14b364
2 changed files with 18 additions and 16 deletions

View File

@ -48,6 +48,21 @@ public class PartHttpMessageWriter extends MultipartWriterSupport implements Htt
super(MultipartHttpMessageReader.MIME_TYPES);
}
@Override
public boolean canWrite(ResolvableType elementType, @Nullable MediaType mediaType) {
if (Part.class.isAssignableFrom(elementType.toClass())) {
if (mediaType == null) {
return true;
}
for (MediaType supportedMediaType : getWritableMediaTypes()) {
if (supportedMediaType.isCompatibleWith(mediaType)) {
return true;
}
}
}
return false;
}
@Override
public Mono<Void> write(Publisher<? extends Part> parts,

View File

@ -52,22 +52,9 @@ public class PartHttpMessageWriterTests extends AbstractLeakCheckingTests {
@Test
public void canWrite() {
assertThat(this.writer.canWrite(
ResolvableType.forClassWithGenerics(MultiValueMap.class, String.class, Object.class),
MediaType.MULTIPART_FORM_DATA)).isTrue();
assertThat(this.writer.canWrite(
ResolvableType.forClassWithGenerics(MultiValueMap.class, String.class, String.class),
MediaType.MULTIPART_FORM_DATA)).isTrue();
assertThat(this.writer.canWrite(
ResolvableType.forClassWithGenerics(MultiValueMap.class, String.class, Object.class),
MediaType.MULTIPART_MIXED)).isTrue();
assertThat(this.writer.canWrite(
ResolvableType.forClassWithGenerics(MultiValueMap.class, String.class, Object.class),
MediaType.MULTIPART_RELATED)).isTrue();
assertThat(this.writer.canWrite(
ResolvableType.forClassWithGenerics(Map.class, String.class, Object.class),
MediaType.MULTIPART_FORM_DATA)).isFalse();
assertThat(this.writer.canWrite(ResolvableType.forClass(Part.class), MediaType.MULTIPART_FORM_DATA)).isTrue();
assertThat(this.writer.canWrite(ResolvableType.forClass(Part.class), MediaType.MULTIPART_MIXED)).isTrue();
assertThat(this.writer.canWrite(ResolvableType.forClass(Part.class), MediaType.MULTIPART_RELATED)).isTrue();
}
@Test