Refactor BodyInsertor
Refactor BodyInsertor to expose insertion logic directly, rather than exposing a writer function and supplier.
This commit is contained in:
@@ -25,8 +25,9 @@ import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A combination of functions that can insert data into a {@link Response} body.
|
||||
* A component that can insert data into a {@link Response} body.
|
||||
*
|
||||
* @param <T> the type of data to insert
|
||||
* @author Arjen Poutsma
|
||||
* @since 5.0
|
||||
* @see Response#body()
|
||||
@@ -36,14 +37,19 @@ import org.springframework.util.Assert;
|
||||
public interface BodyInsertor<T> {
|
||||
|
||||
/**
|
||||
* Return a function that writes to the given response body.
|
||||
* Insert into the given response.
|
||||
* @param response the response to insert into
|
||||
* @param configuration the configuration to use
|
||||
* @return a {@code Mono} that indicates completion or error
|
||||
*/
|
||||
BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer();
|
||||
Mono<Void> insert(ServerHttpResponse response, Configuration configuration);
|
||||
|
||||
/**
|
||||
* Return a function that supplies the type contained in the body.
|
||||
* Return the type contained in the body.
|
||||
* @return the type contained in the body
|
||||
*/
|
||||
Supplier<T> supplier();
|
||||
T t();
|
||||
|
||||
|
||||
/**
|
||||
* Return a new {@code BodyInsertor} described by the given writer and supplier functions.
|
||||
|
||||
@@ -240,14 +240,15 @@ public abstract class BodyInsertors {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer() {
|
||||
return this.writer;
|
||||
public Mono<Void> insert(ServerHttpResponse response, Configuration configuration) {
|
||||
return this.writer.apply(response, configuration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Supplier<T> supplier() {
|
||||
return this.supplier;
|
||||
public T t() {
|
||||
return this.supplier.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -246,14 +246,14 @@ class DefaultResponseBuilder implements Response.BodyBuilder {
|
||||
|
||||
@Override
|
||||
public T body() {
|
||||
return this.insertor.supplier().get();
|
||||
return this.insertor.t();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> writeTo(ServerWebExchange exchange, Configuration configuration) {
|
||||
ServerHttpResponse response = exchange.getResponse();
|
||||
writeStatusAndHeaders(response);
|
||||
return this.insertor.writer().apply(response, configuration);
|
||||
return this.insertor.insert(response, configuration);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.springframework.web.reactive.function;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.file.Files;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import org.junit.Test;
|
||||
import reactor.core.publisher.Flux;
|
||||
@@ -29,7 +28,6 @@ import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||
import org.springframework.http.codec.ServerSentEvent;
|
||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.mock.http.server.reactive.test.MockServerHttpResponse;
|
||||
import org.springframework.tests.TestSubscriber;
|
||||
|
||||
@@ -47,11 +45,10 @@ public class BodyInsertorsTests {
|
||||
String body = "foo";
|
||||
BodyInsertor<String> insertor = BodyInsertors.fromObject(body);
|
||||
|
||||
assertEquals(body, insertor.supplier().get());
|
||||
assertEquals(body, insertor.t());
|
||||
|
||||
BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer = insertor.writer();
|
||||
MockServerHttpResponse response = new MockServerHttpResponse();
|
||||
Mono<Void> result = writer.apply(response, Configuration.builder().build());
|
||||
Mono<Void> result = insertor.insert(response, Configuration.builder().build());
|
||||
TestSubscriber.subscribe(result)
|
||||
.assertComplete();
|
||||
|
||||
@@ -67,11 +64,10 @@ public class BodyInsertorsTests {
|
||||
Flux<String> body = Flux.just("foo");
|
||||
BodyInsertor<Flux<String>> insertor = BodyInsertors.fromPublisher(body, String.class);
|
||||
|
||||
assertEquals(body, insertor.supplier().get());
|
||||
assertEquals(body, insertor.t());
|
||||
|
||||
BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer = insertor.writer();
|
||||
MockServerHttpResponse response = new MockServerHttpResponse();
|
||||
Mono<Void> result = writer.apply(response, Configuration.builder().build());
|
||||
Mono<Void> result = insertor.insert(response, Configuration.builder().build());
|
||||
TestSubscriber.subscribe(result)
|
||||
.assertComplete();
|
||||
|
||||
@@ -87,11 +83,10 @@ public class BodyInsertorsTests {
|
||||
Resource body = new ClassPathResource("response.txt", getClass());
|
||||
BodyInsertor<Resource> insertor = BodyInsertors.fromResource(body);
|
||||
|
||||
assertEquals(body, insertor.supplier().get());
|
||||
assertEquals(body, insertor.t());
|
||||
|
||||
BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer = insertor.writer();
|
||||
MockServerHttpResponse response = new MockServerHttpResponse();
|
||||
Mono<Void> result = writer.apply(response, Configuration.builder().build());
|
||||
Mono<Void> result = insertor.insert(response, Configuration.builder().build());
|
||||
TestSubscriber.subscribe(result)
|
||||
.assertComplete();
|
||||
|
||||
@@ -113,11 +108,10 @@ public class BodyInsertorsTests {
|
||||
BodyInsertor<Flux<ServerSentEvent<String>>> insertor =
|
||||
BodyInsertors.fromServerSentEvents(body);
|
||||
|
||||
assertEquals(body, insertor.supplier().get());
|
||||
assertEquals(body, insertor.t());
|
||||
|
||||
BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer = insertor.writer();
|
||||
MockServerHttpResponse response = new MockServerHttpResponse();
|
||||
Mono<Void> result = writer.apply(response, Configuration.builder().build());
|
||||
Mono<Void> result = insertor.insert(response, Configuration.builder().build());
|
||||
TestSubscriber.subscribe(result)
|
||||
.assertComplete();
|
||||
|
||||
@@ -129,11 +123,10 @@ public class BodyInsertorsTests {
|
||||
BodyInsertor<Flux<String>> insertor =
|
||||
BodyInsertors.fromServerSentEvents(body, String.class);
|
||||
|
||||
assertEquals(body, insertor.supplier().get());
|
||||
assertEquals(body, insertor.t());
|
||||
|
||||
BiFunction<ServerHttpResponse, Configuration, Mono<Void>> writer = insertor.writer();
|
||||
MockServerHttpResponse response = new MockServerHttpResponse();
|
||||
Mono<Void> result = writer.apply(response, Configuration.builder().build());
|
||||
Mono<Void> result = insertor.insert(response, Configuration.builder().build());
|
||||
TestSubscriber.subscribe(result)
|
||||
.assertComplete();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user