Skip to content

Commit cf451c9

Browse files
committed
Fix compatibility problems with Spring Framework 6.2
Fixes gh-934
1 parent 9743b45 commit cf451c9

File tree

7 files changed

+68
-29
lines changed

7 files changed

+68
-29
lines changed

spring-restdocs-core/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,6 @@ components.java.withVariantsFromConfiguration(configurations.testFixturesRuntime
8686
compatibilityTest {
8787
dependency("Spring Framework") { springFramework ->
8888
springFramework.groupId = "org.springframework"
89-
springFramework.versions = ["6.1.+"]
89+
springFramework.versions = ["6.1.+", "6.2.+"]
9090
}
9191
}

spring-restdocs-mockmvc/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ dependencies {
2626
compatibilityTest {
2727
dependency("Spring Framework") { springFramework ->
2828
springFramework.groupId = "org.springframework"
29-
springFramework.versions = ["6.1.+"]
29+
springFramework.versions = ["6.1.+", "6.2.+"]
3030
}
3131
}

spring-restdocs-mockmvc/src/main/java/org/springframework/restdocs/mockmvc/RestDocumentationRequestBuilders.java

+30-19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2023 the original author or authors.
2+
* Copyright 2014-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -51,8 +51,8 @@ private RestDocumentationRequestBuilders() {
5151
* @return the builder for the GET request
5252
*/
5353
public static MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables) {
54-
return MockMvcRequestBuilders.get(urlTemplate, urlVariables)
55-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
54+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
55+
MockMvcRequestBuilders.get(urlTemplate, urlVariables), urlTemplate);
5656
}
5757

5858
/**
@@ -72,8 +72,8 @@ public static MockHttpServletRequestBuilder get(URI uri) {
7272
* @return the builder for the POST request
7373
*/
7474
public static MockHttpServletRequestBuilder post(String urlTemplate, Object... urlVariables) {
75-
return MockMvcRequestBuilders.post(urlTemplate, urlVariables)
76-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
75+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
76+
MockMvcRequestBuilders.post(urlTemplate, urlVariables), urlTemplate);
7777
}
7878

7979
/**
@@ -93,8 +93,8 @@ public static MockHttpServletRequestBuilder post(URI uri) {
9393
* @return the builder for the PUT request
9494
*/
9595
public static MockHttpServletRequestBuilder put(String urlTemplate, Object... urlVariables) {
96-
return MockMvcRequestBuilders.put(urlTemplate, urlVariables)
97-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
96+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
97+
MockMvcRequestBuilders.put(urlTemplate, urlVariables), urlTemplate);
9898
}
9999

100100
/**
@@ -114,8 +114,8 @@ public static MockHttpServletRequestBuilder put(URI uri) {
114114
* @return the builder for the PATCH request
115115
*/
116116
public static MockHttpServletRequestBuilder patch(String urlTemplate, Object... urlVariables) {
117-
return MockMvcRequestBuilders.patch(urlTemplate, urlVariables)
118-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
117+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
118+
MockMvcRequestBuilders.patch(urlTemplate, urlVariables), urlTemplate);
119119
}
120120

121121
/**
@@ -135,8 +135,8 @@ public static MockHttpServletRequestBuilder patch(URI uri) {
135135
* @return the builder for the DELETE request
136136
*/
137137
public static MockHttpServletRequestBuilder delete(String urlTemplate, Object... urlVariables) {
138-
return MockMvcRequestBuilders.delete(urlTemplate, urlVariables)
139-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
138+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
139+
MockMvcRequestBuilders.delete(urlTemplate, urlVariables), urlTemplate);
140140
}
141141

142142
/**
@@ -156,8 +156,8 @@ public static MockHttpServletRequestBuilder delete(URI uri) {
156156
* @return the builder for the OPTIONS request
157157
*/
158158
public static MockHttpServletRequestBuilder options(String urlTemplate, Object... urlVariables) {
159-
return MockMvcRequestBuilders.options(urlTemplate, urlVariables)
160-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
159+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
160+
MockMvcRequestBuilders.options(urlTemplate, urlVariables), urlTemplate);
161161
}
162162

163163
/**
@@ -177,8 +177,8 @@ public static MockHttpServletRequestBuilder options(URI uri) {
177177
* @return the builder for the HEAD request
178178
*/
179179
public static MockHttpServletRequestBuilder head(String urlTemplate, Object... urlVariables) {
180-
return MockMvcRequestBuilders.head(urlTemplate, urlVariables)
181-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
180+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
181+
MockMvcRequestBuilders.head(urlTemplate, urlVariables), urlTemplate);
182182
}
183183

184184
/**
@@ -200,8 +200,8 @@ public static MockHttpServletRequestBuilder head(URI uri) {
200200
*/
201201
public static MockHttpServletRequestBuilder request(HttpMethod httpMethod, String urlTemplate,
202202
Object... urlVariables) {
203-
return MockMvcRequestBuilders.request(httpMethod, urlTemplate, urlVariables)
204-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
203+
return (MockHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
204+
MockMvcRequestBuilders.request(httpMethod, urlTemplate, urlVariables), urlTemplate);
205205
}
206206

207207
/**
@@ -224,8 +224,8 @@ public static MockHttpServletRequestBuilder request(HttpMethod httpMethod, URI u
224224
* @since 2.0.6
225225
*/
226226
public static MockMultipartHttpServletRequestBuilder multipart(String urlTemplate, Object... urlVariables) {
227-
return (MockMultipartHttpServletRequestBuilder) MockMvcRequestBuilders.multipart(urlTemplate, urlVariables)
228-
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
227+
return (MockMultipartHttpServletRequestBuilder) configureUrlTemplateRequestAttribute(
228+
MockMvcRequestBuilders.multipart(urlTemplate, urlVariables), urlTemplate);
229229
}
230230

231231
/**
@@ -238,4 +238,15 @@ public static MockMultipartHttpServletRequestBuilder multipart(URI uri) {
238238
return MockMvcRequestBuilders.multipart(uri);
239239
}
240240

241+
private static Object configureUrlTemplateRequestAttribute(Object builder, String urlTemplate) {
242+
try {
243+
return builder.getClass()
244+
.getMethod("requestAttr", String.class, Object.class)
245+
.invoke(builder, RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate);
246+
}
247+
catch (Exception ex) {
248+
throw new RuntimeException(ex);
249+
}
250+
}
251+
241252
}

spring-restdocs-mockmvc/src/test/java/org/springframework/restdocs/mockmvc/MockMvcRequestConverterTests.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2023 the original author or authors.
2+
* Copyright 2014-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@
3434
import org.springframework.restdocs.operation.OperationRequestPart;
3535
import org.springframework.restdocs.operation.RequestCookie;
3636
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
37+
import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder;
3738
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
3839

3940
import static org.assertj.core.api.Assertions.assertThat;
@@ -236,4 +237,8 @@ private OperationRequest createOperationRequest(MockHttpServletRequestBuilder bu
236237
return this.factory.convert(builder.buildRequest(new MockServletContext()));
237238
}
238239

240+
private OperationRequest createOperationRequest(MockMultipartHttpServletRequestBuilder builder) {
241+
return this.factory.convert(builder.buildRequest(new MockServletContext()));
242+
}
243+
239244
}

spring-restdocs-mockmvc/src/test/java/org/springframework/restdocs/mockmvc/RestDocumentationRequestBuildersTests.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2023 the original author or authors.
2+
* Copyright 2014-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@
2626
import org.springframework.mock.web.MockServletContext;
2727
import org.springframework.restdocs.generate.RestDocumentationGenerator;
2828
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
29+
import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder;
2930

3031
import static org.assertj.core.api.Assertions.assertThat;
3132
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete;
@@ -140,6 +141,15 @@ public void multipartUri() {
140141

141142
private void assertTemplate(MockHttpServletRequestBuilder builder, HttpMethod httpMethod) {
142143
MockHttpServletRequest request = builder.buildRequest(this.servletContext);
144+
assertTemplate(httpMethod, request);
145+
}
146+
147+
private void assertTemplate(MockMultipartHttpServletRequestBuilder builder, HttpMethod httpMethod) {
148+
MockHttpServletRequest request = builder.buildRequest(this.servletContext);
149+
assertTemplate(httpMethod, request);
150+
}
151+
152+
private void assertTemplate(HttpMethod httpMethod, MockHttpServletRequest request) {
143153
assertThat((String) request.getAttribute(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE))
144154
.isEqualTo("/{template}");
145155
assertThat(request.getRequestURI()).isEqualTo("/t");
@@ -148,6 +158,15 @@ private void assertTemplate(MockHttpServletRequestBuilder builder, HttpMethod ht
148158

149159
private void assertUri(MockHttpServletRequestBuilder builder, HttpMethod httpMethod) {
150160
MockHttpServletRequest request = builder.buildRequest(this.servletContext);
161+
assertUri(httpMethod, request);
162+
}
163+
164+
private void assertUri(MockMultipartHttpServletRequestBuilder builder, HttpMethod httpMethod) {
165+
MockHttpServletRequest request = builder.buildRequest(this.servletContext);
166+
assertUri(httpMethod, request);
167+
}
168+
169+
private void assertUri(HttpMethod httpMethod, MockHttpServletRequest request) {
151170
assertThat(request.getRequestURI()).isEqualTo("/uri");
152171
assertThat(request.getMethod()).isEqualTo(httpMethod.name());
153172
}

spring-restdocs-webtestclient/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ dependencies {
2525
compatibilityTest {
2626
dependency("Spring Framework") { springFramework ->
2727
springFramework.groupId = "org.springframework"
28-
springFramework.versions = ["6.1.+"]
28+
springFramework.versions = ["6.1.+", "6.2.+"]
2929
}
3030
}

spring-restdocs-webtestclient/src/test/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverterTests.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2023 the original author or authors.
2+
* Copyright 2014-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -173,8 +173,10 @@ public void postRequestWithFormDataParameters() {
173173
assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo"));
174174
assertThat(request.getMethod()).isEqualTo(HttpMethod.POST);
175175
assertThat(request.getContentAsString()).isEqualTo("a=alpha&a=apple&b=br%26vo");
176-
assertThat(request.getHeaders().getContentType())
177-
.isEqualTo(new MediaType(MediaType.APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8));
176+
assertThat(request.getHeaders().getContentType()).satisfiesAnyOf(
177+
(mediaType) -> assertThat(mediaType)
178+
.isEqualTo(new MediaType(MediaType.APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8)),
179+
(mediaType) -> assertThat(mediaType).isEqualTo(new MediaType(MediaType.APPLICATION_FORM_URLENCODED)));
178180
}
179181

180182
@Test
@@ -217,8 +219,10 @@ public void postRequestWithQueryStringAndFormDataParameters() {
217219
assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo?a=alpha&b=br%26vo"));
218220
assertThat(request.getMethod()).isEqualTo(HttpMethod.POST);
219221
assertThat(request.getContentAsString()).isEqualTo("a=apple");
220-
assertThat(request.getHeaders().getContentType())
221-
.isEqualTo(new MediaType(MediaType.APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8));
222+
assertThat(request.getHeaders().getContentType()).satisfiesAnyOf(
223+
(mediaType) -> assertThat(mediaType)
224+
.isEqualTo(new MediaType(MediaType.APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8)),
225+
(mediaType) -> assertThat(mediaType).isEqualTo(new MediaType(MediaType.APPLICATION_FORM_URLENCODED)));
222226
}
223227

224228
@Test

0 commit comments

Comments
 (0)