diff --git a/spring-web/src/main/java/org/springframework/http/client/MultipartBodyBuilder.java b/spring-web/src/main/java/org/springframework/http/client/MultipartBodyBuilder.java index c1f600b1c0..1e42dc2459 100644 --- a/spring-web/src/main/java/org/springframework/http/client/MultipartBodyBuilder.java +++ b/spring-web/src/main/java/org/springframework/http/client/MultipartBodyBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,9 +25,11 @@ import org.reactivestreams.Publisher; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ResolvableType; +import org.springframework.core.ResolvableTypeProvider; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; @@ -263,13 +265,13 @@ public final class MultipartBodyBuilder { * @param the type contained in the publisher * @param

the publisher */ - public static final class PublisherEntity> extends HttpEntity

{ + public static final class PublisherEntity> extends HttpEntity

+ implements ResolvableTypeProvider { private final ResolvableType resolvableType; - - private PublisherEntity(@Nullable MultiValueMap headers, P publisher, - ResolvableType resolvableType) { + PublisherEntity( + @Nullable MultiValueMap headers, P publisher, ResolvableType resolvableType) { super(publisher, headers); Assert.notNull(publisher, "'publisher' must not be null"); @@ -280,6 +282,8 @@ public final class MultipartBodyBuilder { /** * Return the element type for the {@code Publisher} body. */ + @Override + @NonNull public ResolvableType getResolvableType() { return this.resolvableType; } diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java index 1118b808b5..80f21cfa8b 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java @@ -34,6 +34,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.core.ResolvableType; +import org.springframework.core.ResolvableTypeProvider; import org.springframework.core.codec.CharSequenceEncoder; import org.springframework.core.codec.CodecException; import org.springframework.core.codec.Hints; @@ -46,7 +47,6 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpOutputMessage; -import org.springframework.http.client.MultipartBodyBuilder; import org.springframework.http.codec.EncoderHttpMessageWriter; import org.springframework.http.codec.FormHttpMessageWriter; import org.springframework.http.codec.HttpMessageWriter; @@ -265,11 +265,8 @@ public class MultipartHttpMessageWriter extends LoggingCodecSupport outputHeaders.putAll(httpEntity.getHeaders()); body = httpEntity.getBody(); Assert.state(body != null, "MultipartHttpMessageWriter only supports HttpEntity with body"); - - if (httpEntity instanceof MultipartBodyBuilder.PublisherEntity) { - MultipartBodyBuilder.PublisherEntity publisherEntity = - (MultipartBodyBuilder.PublisherEntity) httpEntity; - resolvableType = publisherEntity.getResolvableType(); + if (httpEntity instanceof ResolvableTypeProvider) { + resolvableType = ((ResolvableTypeProvider) httpEntity).getResolvableType(); } } else {