Improve RouterFunction builder
This commit improves the RouterFunctions.Builder based on conversations had during the weekly team meeting. Issue: SPR-16953
This commit is contained in:
@@ -23,8 +23,11 @@ import org.junit.Test;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -35,10 +38,11 @@ public class RouterFunctionBuilderTests {
|
||||
|
||||
@Test
|
||||
public void route() {
|
||||
RouterFunction<ServerResponse> route = RouterFunctions.builder()
|
||||
.routeGet("/foo", request -> ServerResponse.ok().build())
|
||||
.routePost(request -> ServerResponse.noContent().build())
|
||||
RouterFunction<ServerResponse> route = RouterFunctions.route()
|
||||
.GET("/foo", request -> ServerResponse.ok().build())
|
||||
.POST("/", RequestPredicates.contentType(MediaType.TEXT_PLAIN), request -> ServerResponse.noContent().build())
|
||||
.build();
|
||||
System.out.println(route);
|
||||
|
||||
MockServerRequest fooRequest = MockServerRequest.builder().
|
||||
method(HttpMethod.GET).
|
||||
@@ -56,7 +60,8 @@ public class RouterFunctionBuilderTests {
|
||||
|
||||
MockServerRequest barRequest = MockServerRequest.builder().
|
||||
method(HttpMethod.POST).
|
||||
uri(URI.create("http://localhost"))
|
||||
uri(URI.create("http://localhost/"))
|
||||
.header("Content-Type", "text/plain")
|
||||
.build();
|
||||
|
||||
responseMono = route.route(barRequest)
|
||||
@@ -68,15 +73,65 @@ public class RouterFunctionBuilderTests {
|
||||
.expectNext(204)
|
||||
.verifyComplete();
|
||||
|
||||
MockServerRequest invalidRequest = MockServerRequest.builder().
|
||||
method(HttpMethod.POST).
|
||||
uri(URI.create("http://localhost/"))
|
||||
.build();
|
||||
|
||||
responseMono = route.route(invalidRequest)
|
||||
.flatMap(handlerFunction -> handlerFunction.handle(invalidRequest))
|
||||
.map(ServerResponse::statusCode)
|
||||
.map(HttpStatus::value);
|
||||
|
||||
StepVerifier.create(responseMono)
|
||||
.verifyComplete();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resources() {
|
||||
Resource resource = new ClassPathResource("/org/springframework/web/reactive/function/server/");
|
||||
assertTrue(resource.exists());
|
||||
|
||||
RouterFunction<ServerResponse> route = RouterFunctions.route()
|
||||
.resources("/resources/**", resource)
|
||||
.build();
|
||||
|
||||
MockServerRequest resourceRequest = MockServerRequest.builder().
|
||||
method(HttpMethod.GET).
|
||||
uri(URI.create("http://localhost/resources/response.txt"))
|
||||
.build();
|
||||
|
||||
Mono<Integer> responseMono = route.route(resourceRequest)
|
||||
.flatMap(handlerFunction -> handlerFunction.handle(resourceRequest))
|
||||
.map(ServerResponse::statusCode)
|
||||
.map(HttpStatus::value);
|
||||
|
||||
StepVerifier.create(responseMono)
|
||||
.expectNext(200)
|
||||
.verifyComplete();
|
||||
|
||||
MockServerRequest invalidRequest = MockServerRequest.builder().
|
||||
method(HttpMethod.POST).
|
||||
uri(URI.create("http://localhost/resources/foo.txt"))
|
||||
.build();
|
||||
|
||||
responseMono = route.route(invalidRequest)
|
||||
.flatMap(handlerFunction -> handlerFunction.handle(invalidRequest))
|
||||
.map(ServerResponse::statusCode)
|
||||
.map(HttpStatus::value);
|
||||
|
||||
StepVerifier.create(responseMono)
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nest() {
|
||||
RouterFunction<?> route = RouterFunctions.builder()
|
||||
.nestPath("/foo", builder ->
|
||||
builder.nestPath("/bar",
|
||||
() -> RouterFunctions.builder()
|
||||
.routeGet("/baz", request -> ServerResponse.ok().build())
|
||||
RouterFunction<?> route = RouterFunctions.route()
|
||||
.path("/foo", builder ->
|
||||
builder.path("/bar",
|
||||
() -> RouterFunctions.route()
|
||||
.GET("/baz", request -> ServerResponse.ok().build())
|
||||
.build()))
|
||||
.build();
|
||||
|
||||
@@ -99,18 +154,18 @@ public class RouterFunctionBuilderTests {
|
||||
public void filters() {
|
||||
AtomicInteger filterCount = new AtomicInteger();
|
||||
|
||||
RouterFunction<?> route = RouterFunctions.builder()
|
||||
.routeGet("/foo", request -> ServerResponse.ok().build())
|
||||
.routeGet("/bar", request -> Mono.error(new IllegalStateException()))
|
||||
.filterBefore(request -> {
|
||||
RouterFunction<?> route = RouterFunctions.route()
|
||||
.GET("/foo", request -> ServerResponse.ok().build())
|
||||
.GET("/bar", request -> Mono.error(new IllegalStateException()))
|
||||
.before(request -> {
|
||||
int count = filterCount.getAndIncrement();
|
||||
assertEquals(0, count);
|
||||
return Mono.just(request);
|
||||
return request;
|
||||
})
|
||||
.filterAfter((request, response) -> {
|
||||
.after((request, response) -> {
|
||||
int count = filterCount.getAndIncrement();
|
||||
assertEquals(3, count);
|
||||
return Mono.just(response);
|
||||
return response;
|
||||
})
|
||||
.filter((request, next) -> {
|
||||
int count = filterCount.getAndIncrement();
|
||||
@@ -120,7 +175,7 @@ public class RouterFunctionBuilderTests {
|
||||
assertEquals(2, count);
|
||||
return responseMono;
|
||||
})
|
||||
.filterException(IllegalStateException.class, (e, request) -> ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR).build())
|
||||
.onError(IllegalStateException.class, (e, request) -> ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR).build())
|
||||
.build();
|
||||
|
||||
MockServerRequest fooRequest = MockServerRequest.builder().
|
||||
|
||||
Reference in New Issue
Block a user