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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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) { if (this.host != null) {
uriBuilder.append(this.host); uriBuilder.append(this.host);
} }
if (getPort() != -1) { if (StringUtils.hasText(this.port) && !this.port.equals("-1")) {
uriBuilder.append(':').append(this.port); 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")); 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 @Test
void expand() { void expand() {
UriComponents uri = UriComponentsBuilder.fromUriString("https://example.com").path("/{foo} {bar}").build(); UriComponents uri = UriComponentsBuilder.fromUriString("https://example.com").path("/{foo} {bar}").build();
@ -166,12 +172,6 @@ class UriComponentsTests {
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(uriComponents::toUri) .isThrownBy(uriComponents::toUri)
.withMessage("The port must be an integer: XXX"); .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 @Test