Refine documentation contribution

Closes gh-28758
This commit is contained in:
Sébastien Deleuze 2023-08-28 12:11:25 +02:00
parent 411b355f2c
commit 3ccbe3d1cb
1 changed files with 18 additions and 16 deletions

View File

@ -161,14 +161,11 @@ Java::
public class MultipartExchangeFilterFunction implements ExchangeFilterFunction { public class MultipartExchangeFilterFunction implements ExchangeFilterFunction {
@Override @Override
@Nonnull public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
public Mono<ClientResponse> filter(@Nonnull ClientRequest request, @Nonnull ExchangeFunction next) {
if (MediaType.MULTIPART_FORM_DATA.includes(request.headers().getContentType()) if (MediaType.MULTIPART_FORM_DATA.includes(request.headers().getContentType())
&& (request.method() == HttpMethod.PUT || request.method() == HttpMethod.POST)) { && (request.method() == HttpMethod.PUT || request.method() == HttpMethod.POST)) {
return next.exchange( return next.exchange(ClientRequest.from(request).body((outputMessage, context) ->
ClientRequest.from(request) request.body().insert(new BufferingDecorator(outputMessage), context)).build()
.body((outputMessage, context) -> request.body().insert(new BufferingDecorator(outputMessage), context))
.build()
); );
} else { } else {
return next.exchange(request); return next.exchange(request);
@ -182,8 +179,7 @@ public class MultipartExchangeFilterFunction implements ExchangeFilterFunction {
} }
@Override @Override
@Nonnull public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
public Mono<Void> writeWith(@Nonnull Publisher<? extends DataBuffer> body) {
return DataBufferUtils.join(body).flatMap(buffer -> { return DataBufferUtils.join(body).flatMap(buffer -> {
getHeaders().setContentLength(buffer.readableByteCount()); getHeaders().setContentLength(buffer.readableByteCount());
return super.writeWith(Mono.just(buffer)); return super.writeWith(Mono.just(buffer));
@ -200,19 +196,25 @@ Kotlin::
class MultipartExchangeFilterFunction : ExchangeFilterFunction { class MultipartExchangeFilterFunction : ExchangeFilterFunction {
override fun filter(request: ClientRequest, next: ExchangeFunction): Mono<ClientResponse> { override fun filter(request: ClientRequest, next: ExchangeFunction): Mono<ClientResponse> {
return next.exchange(ClientRequest.from(request) return if (MediaType.MULTIPART_FORM_DATA.includes(request.headers().getContentType())
.body { message: ClientHttpRequest?, context: BodyInserter.Context? -> request.body().insert(BufferingDecorator(message), context!!) } && (request.method() == HttpMethod.PUT || request.method() == HttpMethod.POST)) {
next.exchange(ClientRequest.from(request)
.body { message, context -> request.body().insert(BufferingDecorator(message), context) }
.build()) .build())
}
else {
next.exchange(request)
}
} }
private class BufferingDecorator(delegate: ClientHttpRequest?) : ClientHttpRequestDecorator(delegate!!) { private class BufferingDecorator(delegate: ClientHttpRequest) : ClientHttpRequestDecorator(delegate) {
override fun writeWith(body: Publisher<out DataBuffer>): Mono<Void> { override fun writeWith(body: Publisher<out DataBuffer>): Mono<Void> {
return DataBufferUtils.join(body) return DataBufferUtils.join(body)
.flatMap { dataBuffer: DataBuffer -> .flatMap {
val length = dataBuffer.readableByteCount() headers.contentLength = it.readableByteCount().toLong()
headers.contentLength = length.toLong() super.writeWith(Mono.just(it))
super.writeWith(Mono.just(dataBuffer)) }
}
} }
} }
} }