Interface UriBuilder
- All Known Implementing Classes:
ServletUriComponentsBuilder
,UriComponentsBuilder
Effectively a generalization of UriComponentsBuilder
but with
shortcuts to expand directly into URI
rather than
UriComponents
and also leaving common concerns such as encoding
preferences, a base URI, and others as implementation concerns.
Typically obtained via UriBuilderFactory
which serves as a central
component configured once and used to create many URLs.
- Since:
- 5.0
- Author:
- Rossen Stoyanchev
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionBuild aURI
instance and replaces URI template variables with the values from an array.Build aURI
instance and replaces URI template variables with the values from a map.Set the URI fragment.Set the URI host which may contain URI template variables, and may also benull
to clear the host of this builder.Append to the path of this builder.pathSegment
(String... pathSegments) Append to the path using path segments.port
(int port) Set the URI port.Set the URI port.Parse the given query string into query parameters where parameters are separated with'&'
and their values, if any, with'='
.queryParam
(String name, Object... values) Append the given query parameter.queryParam
(String name, Collection<?> values) Variant ofqueryParam(String, Object...)
with a Collection.queryParamIfPresent
(String name, Optional<?> value) Delegates to eitherqueryParam(String, Object...)
orqueryParam(String, Collection)
if the givenOptional
has a value, or else if it is empty, no query parameter is added at all.queryParams
(MultiValueMap<String, String> params) Add multiple query parameters and values.replacePath
(String path) Override the current path.replaceQuery
(String query) Clear existing query parameters and then delegate toquery(String)
.replaceQueryParam
(String name, Object... values) Set the query parameter values replacing existing values, or if no values are given, the query parameter is removed.replaceQueryParam
(String name, Collection<?> values) Variant ofreplaceQueryParam(String, Object...)
with a Collection.replaceQueryParams
(MultiValueMap<String, String> params) Set the query parameter values after removing all existing ones.Set the URI scheme which may contain URI template variables, and may also benull
to clear the scheme of this builder.Return a String representation of the URI by concatenating all URI component values into the fully formed URI String.Set the URI user info which may contain URI template variables, and may also benull
to clear the user info of this builder.
-
Method Details
-
scheme
Set the URI scheme which may contain URI template variables, and may also benull
to clear the scheme of this builder.- Parameters:
scheme
- the URI scheme
-
userInfo
Set the URI user info which may contain URI template variables, and may also benull
to clear the user info of this builder.- Parameters:
userInfo
- the URI user info
-
host
Set the URI host which may contain URI template variables, and may also benull
to clear the host of this builder.- Parameters:
host
- the URI host
-
port
Set the URI port. Passing-1
will clear the port of this builder.- Parameters:
port
- the URI port
-
port
Set the URI port. Use this method only when the port needs to be parameterized with a URI variable. Otherwise useport(int)
. Passingnull
will clear the port of this builder.- Parameters:
port
- the URI port
-
path
Append to the path of this builder.The given value is appended as-is to previous
path
values without inserting any additional slashes. For example:builder.path("/first-").path("value/").path("/{id}").build("123") // Results is "/first-value/123"
By contrast
pathSegment
does insert slashes between individual path segments. For example:builder.pathSegment("first-value", "second-value").path("/") // Results is "/first-value/second-value/"
The resulting full path is normalized to eliminate duplicate slashes.
Note: When inserting a URI variable value that contains slashes in a
path
, whether those are encoded depends on the configured encoding mode. For more details, seeUriComponentsBuilder.encode()
, or otherwise if building URIs indirectly viaWebClient
orRestTemplate
, see itsencodingMode
. Also see the URI Encoding section of the reference docs.- Parameters:
path
- the URI path
-
replacePath
Override the current path.- Parameters:
path
- the URI path, ornull
for an empty path
-
pathSegment
Append to the path using path segments. For example:builder.pathSegment("first-value", "second-value", "{id}").build("123") // Results is "/first-value/second-value/123"
If slashes are present in a path segment, they are encoded:
builder.pathSegment("ba/z", "{id}").build("a/b") // Results is "/ba%2Fz/a%2Fb"
To insert a trailing slash, use thepath(java.lang.String)
builder method:builder.pathSegment("first-value", "second-value").path("/") // Results is "/first-value/second-value/"
Empty path segments are ignored and therefore duplicate slashes do not appear in the resulting full path.
- Parameters:
pathSegments
- the URI path segments- Throws:
IllegalArgumentException
-
query
Parse the given query string into query parameters where parameters are separated with'&'
and their values, if any, with'='
. The query may contain URI template variables.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
query
- the query string
-
replaceQuery
Clear existing query parameters and then delegate toquery(String)
.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
query
- the query string; anull
value removes all query parameters.
-
queryParam
Append the given query parameter. Both the parameter name and values may contain URI template variables to be expanded later from values. If no values are given, the resulting URI will contain the query parameter name only, for example,"?foo"
instead of"?foo=bar"
.Note: encoding, if applied, will only encode characters that are illegal in a query parameter name or value such as
"="
or"&"
. All others that are legal as per syntax rules in RFC 3986 are not encoded. This includes"+"
which sometimes needs to be encoded to avoid its interpretation as an encoded space. Stricter encoding may be applied by using a URI template variable along with stricter encoding on variable values. For more details please read the "URI Encoding" section of the Spring Framework reference.- Parameters:
name
- the query parameter namevalues
- the query parameter values- See Also:
-
queryParam
Variant ofqueryParam(String, Object...)
with a Collection.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
name
- the query parameter namevalues
- the query parameter values- Since:
- 5.2
- See Also:
-
queryParamIfPresent
Delegates to eitherqueryParam(String, Object...)
orqueryParam(String, Collection)
if the givenOptional
has a value, or else if it is empty, no query parameter is added at all.- Parameters:
name
- the query parameter namevalue
- an Optional, either empty or holding the query parameter value.- Since:
- 5.3
-
queryParams
Add multiple query parameters and values.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
params
- the params
-
replaceQueryParam
Set the query parameter values replacing existing values, or if no values are given, the query parameter is removed.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
name
- the query parameter namevalues
- the query parameter values- See Also:
-
replaceQueryParam
Variant ofreplaceQueryParam(String, Object...)
with a Collection.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
name
- the query parameter namevalues
- the query parameter values- Since:
- 5.2
- See Also:
-
replaceQueryParams
Set the query parameter values after removing all existing ones.Note: please, review the Javadoc of
queryParam(String, Object...)
for further notes on the treatment and encoding of individual query parameters.- Parameters:
params
- the query parameter name
-
fragment
Set the URI fragment. The given fragment may contain URI template variables, and may also benull
to clear the fragment of this builder.- Parameters:
fragment
- the URI fragment
-
build
Build aURI
instance and replaces URI template variables with the values from an array.- Parameters:
uriVariables
- the map of URI variables- Returns:
- the URI
-
build
Build aURI
instance and replaces URI template variables with the values from a map.- Parameters:
uriVariables
- the map of URI variables- Returns:
- the URI
-
toUriString
String toUriString()Return a String representation of the URI by concatenating all URI component values into the fully formed URI String. Implementing classes should perform simple String concatenation of current URI component values to preserve URI template placeholders.- Since:
- 6.1.2
-