Fragment should be expanded last
Closes gh-22447
This commit is contained in:
@@ -420,13 +420,15 @@ final class HierarchicalUriComponents extends UriComponents {
|
|||||||
Assert.state(!this.encodeState.equals(EncodeState.FULLY_ENCODED),
|
Assert.state(!this.encodeState.equals(EncodeState.FULLY_ENCODED),
|
||||||
"URI components already encoded, and could not possibly contain '{' or '}'.");
|
"URI components already encoded, and could not possibly contain '{' or '}'.");
|
||||||
|
|
||||||
|
// Array-based vars rely on the below order..
|
||||||
|
|
||||||
String schemeTo = expandUriComponent(getScheme(), uriVariables, this.variableEncoder);
|
String schemeTo = expandUriComponent(getScheme(), uriVariables, this.variableEncoder);
|
||||||
String fragmentTo = expandUriComponent(getFragment(), uriVariables, this.variableEncoder);
|
|
||||||
String userInfoTo = expandUriComponent(this.userInfo, uriVariables, this.variableEncoder);
|
String userInfoTo = expandUriComponent(this.userInfo, uriVariables, this.variableEncoder);
|
||||||
String hostTo = expandUriComponent(this.host, uriVariables, this.variableEncoder);
|
String hostTo = expandUriComponent(this.host, uriVariables, this.variableEncoder);
|
||||||
String portTo = expandUriComponent(this.port, uriVariables, this.variableEncoder);
|
String portTo = expandUriComponent(this.port, uriVariables, this.variableEncoder);
|
||||||
PathComponent pathTo = this.path.expand(uriVariables, this.variableEncoder);
|
PathComponent pathTo = this.path.expand(uriVariables, this.variableEncoder);
|
||||||
MultiValueMap<String, String> queryParamsTo = expandQueryParams(uriVariables);
|
MultiValueMap<String, String> queryParamsTo = expandQueryParams(uriVariables);
|
||||||
|
String fragmentTo = expandUriComponent(getFragment(), uriVariables, this.variableEncoder);
|
||||||
|
|
||||||
return new HierarchicalUriComponents(schemeTo, fragmentTo, userInfoTo,
|
return new HierarchicalUriComponents(schemeTo, fragmentTo, userInfoTo,
|
||||||
hostTo, portTo, pathTo, queryParamsTo, this.encodeState, this.variableEncoder);
|
hostTo, portTo, pathTo, queryParamsTo, this.encodeState, this.variableEncoder);
|
||||||
|
|||||||
@@ -130,6 +130,15 @@ public class UriComponentsTests {
|
|||||||
UriComponentsBuilder.fromUriString("/myurl/?q={{{{").encode().build().toUriString());
|
UriComponentsBuilder.fromUriString("/myurl/?q={{{{").encode().build().toUriString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test // gh-22447
|
||||||
|
public void expandWithFragmentOrder() {
|
||||||
|
UriComponents uriComponents = UriComponentsBuilder
|
||||||
|
.fromUriString("http://{host}/{path}#{fragment}").build()
|
||||||
|
.expand("example.com", "foo", "bar");
|
||||||
|
|
||||||
|
assertEquals("http://example.com/foo#bar", uriComponents.toUriString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test // SPR-12123
|
@Test // SPR-12123
|
||||||
public void port() {
|
public void port() {
|
||||||
UriComponents uri1 = fromUriString("http://example.com:8080/bar").build();
|
UriComponents uri1 = fromUriString("http://example.com:8080/bar").build();
|
||||||
|
|||||||
Reference in New Issue
Block a user