Fix parent path variables in nested route functions

This commit fix an issue where path variables in a nested parent
RouterFunction were not committed to the request attributes.

Issue: SPR-16868

(cherry picked from commit 8c30b8e)
This commit is contained in:
Arjen Poutsma
2018-05-29 15:39:40 +02:00
parent 6407cb9baf
commit a7ffe092ab
2 changed files with 36 additions and 6 deletions

View File

@@ -41,11 +41,12 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
protected RouterFunction<?> routerFunction() {
NestedHandler nestedHandler = new NestedHandler();
return nest(path("/foo/"),
route(GET("/bar"), nestedHandler::bar)
.andRoute(GET("/baz"), nestedHandler::baz))
.andNest(GET("/{foo}"),
nest(GET("/{bar}"),
route(GET("/{baz}"), nestedHandler::variables)))
route(GET("/bar"), nestedHandler::bar)
.andRoute(GET("/baz"), nestedHandler::baz))
.andNest(GET("/{foo}"),
route(GET("/bar"), nestedHandler::variables).and(
nest(GET("/{bar}"),
route(GET("/{baz}"), nestedHandler::variables))))
.andRoute(GET("/{qux}/quux"), nestedHandler::variables);
}
@@ -77,6 +78,17 @@ public class NestedRouteIntegrationTests extends AbstractRouterFunctionIntegrati
assertEquals("{foo=1, bar=2, baz=3}", result.getBody());
}
// SPR-16868
@Test
public void parentVariables() throws Exception {
ResponseEntity<String> result =
restTemplate.getForEntity("http://localhost:" + port + "/1/bar", String.class);
assertEquals(HttpStatus.OK, result.getStatusCode());
assertEquals("{foo=1}", result.getBody());
}
// SPR 16692
@Test
public void removeFailedPathVariables() throws Exception {