@ -16,16 +16,23 @@
@@ -16,16 +16,23 @@
package org.springframework.web.reactive.function.server ;
import java.util.Map ;
import org.junit.Test ;
import reactor.core.publisher.Mono ;
import org.springframework.http.HttpMethod ;
import org.springframework.http.HttpStatus ;
import org.springframework.http.ResponseEntity ;
import org.springframework.web.client.RestTemplate ;
import static org.junit.Assert.* ;
import static org.springframework.web.reactive.function.server.RequestPredicates.* ;
import static org.springframework.web.reactive.function.server.RouterFunctions.* ;
import static org.springframework.web.reactive.function.server.RequestPredicates.GET ;
import static org.springframework.web.reactive.function.server.RequestPredicates.all ;
import static org.springframework.web.reactive.function.server.RequestPredicates.method ;
import static org.springframework.web.reactive.function.server.RequestPredicates.path ;
import static org.springframework.web.reactive.function.server.RouterFunctions.nest ;
import static org.springframework.web.reactive.function.server.RouterFunctions.route ;
/ * *
* @author Arjen Poutsma
@ -45,7 +52,8 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
@@ -45,7 +52,8 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
route ( GET ( "/bar" ) , nestedHandler : : variables ) . and (
nest ( GET ( "/{bar}" ) ,
route ( GET ( "/{baz}" ) , nestedHandler : : variables ) ) ) )
. andRoute ( GET ( "/{qux}/quux" ) , nestedHandler : : variables ) ;
. andRoute ( path ( "/{qux}/quux" ) . and ( method ( HttpMethod . GET ) ) , nestedHandler : : variables )
. andRoute ( all ( ) , nestedHandler : : variables ) ;
}
@ -89,7 +97,7 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
@@ -89,7 +97,7 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
// SPR 16692
@Test
public void removeFailedPathVariables ( ) {
public void removeFailedNested PathVariables ( ) {
ResponseEntity < String > result =
restTemplate . getForEntity ( "http://localhost:" + port + "/qux/quux" , String . class ) ;
@ -98,6 +106,17 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
@@ -98,6 +106,17 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
}
// SPR 17210
@Test
public void removeFailedPathVariablesAnd ( ) {
ResponseEntity < String > result =
restTemplate . postForEntity ( "http://localhost:" + port + "/qux/quux" , "" , String . class ) ;
assertEquals ( HttpStatus . OK , result . getStatusCode ( ) ) ;
assertEquals ( "{}" , result . getBody ( ) ) ;
}
private static class NestedHandler {
@ -109,11 +128,15 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
@@ -109,11 +128,15 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
return ServerResponse . ok ( ) . syncBody ( "baz" ) ;
}
@SuppressWarnings ( "unchecked" )
public Mono < ServerResponse > variables ( ServerRequest request ) {
assertEquals ( request . pathVariables ( ) ,
request . attributes ( ) . get ( RouterFunctions . URI_TEMPLATE_VARIABLES_ATTRIBUTE ) ) ;
Map < String , String > pathVariables = request . pathVariables ( ) ;
Map < String , String > attributePathVariables =
( Map < String , String > ) request . attributes ( ) . get ( RouterFunctions . URI_TEMPLATE_VARIABLES_ATTRIBUTE ) ;
assertTrue ( ( pathVariables . equals ( attributePathVariables ) )
| | ( pathVariables . isEmpty ( ) & & ( attributePathVariables = = null ) ) ) ;
Mono < String > responseBody = Mono . just ( request . pathVariables ( ) . toString ( ) ) ;
Mono < String > responseBody = Mono . just ( pathVariables . toString ( ) ) ;
return ServerResponse . ok ( ) . body ( responseBody , String . class ) ;
}