Lenient port handling in HierarchicalUriComponents#toUriString

Closes gh-32003
This commit is contained in:
rstoyanchev 2024-01-10 20:59:59 +00:00
parent 2b4ffe0391
commit 50fad9ed05
2 changed files with 8 additions and 8 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -485,7 +485,7 @@ final class HierarchicalUriComponents extends UriComponents {
if (this.host != null) {
uriBuilder.append(this.host);
}
if (getPort() != -1) {
if (StringUtils.hasText(this.port) && !this.port.equals("-1")) {
uriBuilder.append(':').append(this.port);
}
}

View File

@ -101,6 +101,12 @@ class UriComponentsTests {
URI.create("http://[1abc:2abc:3abc::5ABC:6abc]:8080/hotel%20list/Z%C3%BCrich"));
}
@Test
void toUriStringWithPortVariable() {
String url = "http://localhost:{port}/first";
assertThat(UriComponentsBuilder.fromUriString(url).build().toUriString()).isEqualTo(url);
}
@Test
void expand() {
UriComponents uri = UriComponentsBuilder.fromUriString("https://example.com").path("/{foo} {bar}").build();
@ -166,12 +172,6 @@ class UriComponentsTests {
assertThatIllegalStateException()
.isThrownBy(uriComponents::toUri)
.withMessage("The port must be an integer: XXX");
assertThatIllegalStateException()
.isThrownBy(uriComponents::toUriString)
.withMessage("The port must be an integer: XXX");
assertThatIllegalStateException()
.isThrownBy(uriComponents::toString)
.withMessage("The port must be an integer: XXX");
}
@Test