diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index f33c8b2e609..8e94a0304d6 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -441,7 +441,15 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { } /** - * Build a URI String. This is a shortcut for: + * Build a URI String. + *
Effectively, a shortcut for building, encoding, and returning the + * String representation: + *
+ * String uri = builder.build().encode().toUriString() + *+ *
However if {@link #uriVariables(Map) URI variables} have been provided + * then the URI template is pre-encoded separately from URI variables (see + * {@link #encode()} for details), i.e. equivalent to: *
* String uri = builder.encode().build().toUriString() *@@ -449,7 +457,9 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { * @see UriComponents#toUriString() */ public String toUriString() { - return buildInternal(EncodingHint.ENCODE_TEMPLATE).toUriString(); + return this.uriVariables.isEmpty() ? + encode().build().toUriString() : + buildInternal(EncodingHint.ENCODE_TEMPLATE).toUriString(); }