Browse Source

Refactor BodyInsertor

Refactor BodyInsertor to expose insertion logic directly, rather than
exposing a writer function and supplier.
pull/1179/head
Arjen Poutsma 9 years ago
parent
commit
b6035ce9ae
  1. 16
      spring-web-reactive/src/main/java/org/springframework/web/reactive/function/BodyInsertor.java
  2. 9
      spring-web-reactive/src/main/java/org/springframework/web/reactive/function/BodyInsertors.java
  3. 4
      spring-web-reactive/src/main/java/org/springframework/web/reactive/function/DefaultResponseBuilder.java
  4. 27
      spring-web-reactive/src/test/java/org/springframework/web/reactive/function/BodyInsertorsTests.java

16
spring-web-reactive/src/main/java/org/springframework/web/reactive/function/BodyInsertor.java

@ -25,8 +25,9 @@ import org.springframework.http.server.reactive.ServerHttpResponse; @@ -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; @@ -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.

9
spring-web-reactive/src/main/java/org/springframework/web/reactive/function/BodyInsertors.java

@ -240,14 +240,15 @@ public abstract class BodyInsertors { @@ -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();
}
}

4
spring-web-reactive/src/main/java/org/springframework/web/reactive/function/DefaultResponseBuilder.java

@ -246,14 +246,14 @@ class DefaultResponseBuilder implements Response.BodyBuilder { @@ -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);
}
}

27
spring-web-reactive/src/test/java/org/springframework/web/reactive/function/BodyInsertorsTests.java

@ -18,7 +18,6 @@ package org.springframework.web.reactive.function; @@ -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; @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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();

Loading…
Cancel
Save