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:
Florian Schöffl
2019-05-16 19:50:02 +02:00
committed by Artem Bilan
parent 9f53b80e18
commit 87169bc77a
2 changed files with 51 additions and 1 deletions

View File

@@ -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);

View File

@@ -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();