HTTP Outbound: Call encode() for URIs
* Encoding in `AbstractHttpRequestExecutingMessageHandler` is now done when flag is set * Added test for URI Encoding * Fixed checkstyle violations **Cherry-pick to 5.1.x** * Resolve conflicts in the `HttpRequestExecutingMessageHandlerTests`
This commit is contained in:
committed by
Artem Bilan
parent
5c1b776df4
commit
c2fe7d788b
@@ -69,6 +69,7 @@ import org.springframework.web.util.UriComponentsBuilder;
|
||||
* @author Artem Bilan
|
||||
* @author Wallace Wadge
|
||||
* @author Shiliang Li
|
||||
* @author Florian Schöffl
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
@@ -303,7 +304,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);
|
||||
|
||||
@@ -78,6 +78,7 @@ import org.springframework.web.client.RestTemplate;
|
||||
* @author Artem Bilan
|
||||
* @author Gary Russell
|
||||
* @author Gunnar Hillert
|
||||
* @author Florian Schöffl
|
||||
*/
|
||||
public class HttpRequestExecutingMessageHandlerTests {
|
||||
|
||||
@@ -751,6 +752,54 @@ public class HttpRequestExecutingMessageHandlerTests {
|
||||
assertEquals(theURL, restTemplate.actualUrl.get());
|
||||
}
|
||||
|
||||
@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) {
|
||||
}
|
||||
assertEquals("http://example.com?query=test-%C3%A4%C3%B6%C3%BC%26%25", restTemplate.actualUrl.get());
|
||||
}
|
||||
|
||||
@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) {
|
||||
}
|
||||
assertEquals("http://example.com?query=test-äöü", restTemplate.actualUrl.get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInt2455UriNotEncoded() {
|
||||
MockRestTemplate restTemplate = new MockRestTemplate();
|
||||
|
||||
Reference in New Issue
Block a user