Add resource redirection to WebMVC functional router

See gh-27257
This commit is contained in:
Sébastien Deleuze
2024-02-09 11:16:15 +01:00
parent 2d7b2e59b6
commit d3ca6f9f6a
6 changed files with 175 additions and 14 deletions

View File

@@ -39,11 +39,13 @@ import org.springframework.web.testfixture.servlet.MockHttpServletRequest;
import static java.util.Collections.emptyList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.web.servlet.function.RequestPredicates.HEAD;
import static org.springframework.web.servlet.function.RequestPredicates.path;
/**
* Tests for {@link RouterFunctionBuilder}.
*
* @author Arjen Poutsma
* @author Sebastien Deleuze
*/
class RouterFunctionBuilderTests {
@@ -96,6 +98,23 @@ class RouterFunctionBuilderTests {
}
}
@Test
void resource() {
Resource resource = new ClassPathResource("/org/springframework/web/servlet/function/response.txt");
assertThat(resource.exists()).isTrue();
RouterFunction<ServerResponse> route = RouterFunctions.route()
.resource(path("/test"), resource)
.build();
ServerRequest resourceRequest = initRequest("GET", "/test");
Optional<HttpStatusCode> responseStatus = route.route(resourceRequest)
.map(handlerFunction -> handle(handlerFunction, resourceRequest))
.map(ServerResponse::statusCode);
assertThat(responseStatus).contains(HttpStatus.OK);
}
@Test
void resources() {
Resource resource = new ClassPathResource("/org/springframework/web/servlet/function/");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -74,14 +74,6 @@ class RouterFunctionDslTests {
assertThat(sampleRouter().route(request).isPresent).isTrue()
}
@Test
fun resourceByPath() {
val servletRequest = PathPatternsTestUtils.initRequest(
"GET", "/org/springframework/web/servlet/function/response.txt", true)
val request = DefaultServerRequest(servletRequest, emptyList())
assertThat(sampleRouter().route(request).isPresent).isTrue()
}
@Test
fun method() {
val servletRequest = PathPatternsTestUtils.initRequest("PATCH", "/", true)
@@ -98,6 +90,20 @@ class RouterFunctionDslTests {
@Test
fun resource() {
val servletRequest = PathPatternsTestUtils.initRequest("GET","/response2.txt", true)
val request = DefaultServerRequest(servletRequest, emptyList())
assertThat(sampleRouter().route(request).isPresent).isTrue()
}
@Test
fun resources() {
val servletRequest = PathPatternsTestUtils.initRequest("GET", "/resources/response.txt", true)
val request = DefaultServerRequest(servletRequest, emptyList())
assertThat(sampleRouter().route(request).isPresent).isTrue()
}
@Test
fun resourcesLookupFunction() {
val servletRequest = PathPatternsTestUtils.initRequest("GET", "/response.txt", true)
val request = DefaultServerRequest(servletRequest, emptyList())
assertThat(sampleRouter().route(request).isPresent).isTrue()
@@ -168,8 +174,9 @@ class RouterFunctionDslTests {
GET("/api/foo/", ::handle)
}
headers({ it.header("bar").isNotEmpty() }, ::handle)
resources("/org/springframework/web/servlet/function/**",
ClassPathResource("/org/springframework/web/servlet/function/response.txt"))
resource(path("/response2.txt"), ClassPathResource("/org/springframework/web/servlet/function/response.txt"))
resources("/resources/**",
ClassPathResource("/org/springframework/web/servlet/function/"))
resources {
if (it.path() == "/response.txt") {
ClassPathResource("/org/springframework/web/servlet/function/response.txt")