HTTP Outobund: Call encode() for URIs
* Encoding in AbstractHttpRequestExecutingMessageHandler.java is now done when flag is set * Added test for URI Encoding * Fixed checkstyle violations **Cherry-pick to 5.1.x**
This commit is contained in:
committed by
Artem Bilan
parent
9f53b80e18
commit
87169bc77a
@@ -73,6 +73,7 @@ import org.springframework.web.util.UriComponentsBuilder;
|
||||
* @author Artem Bilan
|
||||
* @author Wallace Wadge
|
||||
* @author Shiliang Li
|
||||
* @author Florian Schöffl
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
@@ -301,7 +302,7 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
|
||||
: UriComponentsBuilder.fromUri((URI) uri);
|
||||
UriComponents uriComponents = uriComponentsBuilder.buildAndExpand(uriVariables);
|
||||
try {
|
||||
return this.encodeUri ? uriComponents.toUri() : new URI(uriComponents.toUriString());
|
||||
return this.encodeUri ? uriComponents.encode().toUri() : new URI(uriComponents.toUriString());
|
||||
}
|
||||
catch (URISyntaxException e) {
|
||||
throw new MessageHandlingException(requestMessage, "Invalid URI [" + uri + "]", e);
|
||||
|
||||
@@ -73,6 +73,7 @@ import org.springframework.web.client.RestTemplate;
|
||||
* @author Artem Bilan
|
||||
* @author Gary Russell
|
||||
* @author Gunnar Hillert
|
||||
* @author Florian Schöffl
|
||||
*/
|
||||
public class HttpRequestExecutingMessageHandlerTests {
|
||||
|
||||
@@ -746,6 +747,54 @@ public class HttpRequestExecutingMessageHandlerTests {
|
||||
assertThat(restTemplate.actualUrl.get()).isEqualTo(theURL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUriEncoded() {
|
||||
SpelExpressionParser parser = new SpelExpressionParser();
|
||||
MockRestTemplate restTemplate = new MockRestTemplate();
|
||||
|
||||
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler(
|
||||
"http://example.com?query={query}",
|
||||
restTemplate
|
||||
);
|
||||
|
||||
// This flag is set by default to true, but for sake of clarity for the reader we explicitly set it here again
|
||||
handler.setEncodeUri(true);
|
||||
|
||||
handler.setUriVariableExpressions(Collections.singletonMap("query", parser.parseExpression("payload")));
|
||||
setBeanFactory(handler);
|
||||
handler.afterPropertiesSet();
|
||||
Message<?> message = new GenericMessage<>("test-äöü&%");
|
||||
try {
|
||||
handler.handleMessage(message);
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
}
|
||||
assertThat(restTemplate.actualUrl.get()).isEqualTo("http://example.com?query=test-%C3%A4%C3%B6%C3%BC%26%25");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUriEncodedDisabled() {
|
||||
SpelExpressionParser parser = new SpelExpressionParser();
|
||||
MockRestTemplate restTemplate = new MockRestTemplate();
|
||||
|
||||
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler(
|
||||
"http://example.com?query={query}",
|
||||
restTemplate
|
||||
);
|
||||
|
||||
handler.setEncodeUri(false);
|
||||
handler.setUriVariableExpressions(Collections.singletonMap("query", parser.parseExpression("payload")));
|
||||
setBeanFactory(handler);
|
||||
handler.afterPropertiesSet();
|
||||
Message<?> message = new GenericMessage<>("test-äöü");
|
||||
try {
|
||||
handler.handleMessage(message);
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
}
|
||||
assertThat(restTemplate.actualUrl.get()).isEqualTo("http://example.com?query=test-äöü");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInt2455UriNotEncoded() {
|
||||
MockRestTemplate restTemplate = new MockRestTemplate();
|
||||
|
||||
Reference in New Issue
Block a user