Browse Source

Merge branch '5.2.x'

pull/25302/head
Brian Clozel 6 years ago
parent
commit
1f78cede72
  1. 1
      spring-web/src/main/java/org/springframework/http/server/reactive/DefaultServerHttpRequestBuilder.java
  2. 31
      spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java

1
spring-web/src/main/java/org/springframework/http/server/reactive/DefaultServerHttpRequestBuilder.java

@ -71,6 +71,7 @@ class DefaultServerHttpRequestBuilder implements ServerHttpRequest.Builder { @@ -71,6 +71,7 @@ class DefaultServerHttpRequestBuilder implements ServerHttpRequest.Builder {
this.uri = original.getURI();
this.headers = HttpHeaders.writableHttpHeaders(original.getHeaders());
this.httpMethodValue = original.getMethodValue();
this.contextPath = original.getPath().contextPath().value();
this.remoteAddress = original.getRemoteAddress();
this.body = original.getBody();
this.originalRequest = original;

31
spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java

@ -37,6 +37,7 @@ import org.springframework.web.testfixture.servlet.MockHttpServletResponse; @@ -37,6 +37,7 @@ import org.springframework.web.testfixture.servlet.MockHttpServletResponse;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
/**
@ -164,14 +165,42 @@ public class ServerHttpRequestTests { @@ -164,14 +165,42 @@ public class ServerHttpRequestTests {
assertThat(request.getHeaders().get(headerName)).containsExactly(headerValue3);
}
@Test
void mutateWithExistingContextPath() throws Exception {
ServerHttpRequest request = createRequest("/context/path", "/context");
ServerHttpRequest mutated = request.mutate().build();
assertThat(mutated.getPath().contextPath().value()).isEqualTo("/context");
assertThat(mutated.getPath().pathWithinApplication().value()).isEqualTo("/path");
assertThat(mutated.getURI().getRawPath()).isEqualTo("/context/path");
mutated = request.mutate().contextPath("/other").path("/other/path").build();
assertThat(mutated.getPath().contextPath().value()).isEqualTo("/other");
assertThat(mutated.getPath().pathWithinApplication().value()).isEqualTo("/path");
assertThat(mutated.getURI().getRawPath()).isEqualTo("/other/path");
}
@Test
void mutateContextPathWithoutUpdatingPathShouldFail() throws Exception {
ServerHttpRequest request = createRequest("/context/path", "/context");
assertThatThrownBy(() -> request.mutate().path("/fail").build())
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("Invalid contextPath '/context': must match the start of requestPath: '/fail'");
}
private ServerHttpRequest createRequest(String uriString) throws Exception {
return createRequest(uriString, "");
}
private ServerHttpRequest createRequest(String uriString, String contextPath) throws Exception {
URI uri = URI.create(uriString);
MockHttpServletRequest request = new TestHttpServletRequest(uri);
request.setContextPath(contextPath);
AsyncContext asyncContext = new MockAsyncContext(request, new MockHttpServletResponse());
return new ServletServerHttpRequest(request, asyncContext, "", new DefaultDataBufferFactory(), 1024);
}
private static class TestHttpServletRequest extends MockHttpServletRequest {
TestHttpServletRequest(URI uri) {

Loading…
Cancel
Save