javax.ws.rs.core
Class UriBuilder

URI template aware utility class for building URIs from their components. See
Path.value() for an explanation of URI templates.

Builder methods perform contextual encoding of characters not permitted in
the corresponding URI component following the rules of the
application/x-www-form-urlencoded
media type for query parameters and
RFC 3986 for all other
components. Note that only characters not permitted in a particular component
are subject to encoding so, e.g., a path supplied to one of the path
methods may contain matrix parameters or multiple path segments since the
separators are legal characters and will not be encoded. Percent encoded
values are also recognized where allowed and will not be double encoded.

URI templates are allowed in most components of a URI but their value is
restricted to a particular component. E.g.

UriBuilder.fromPath("{arg1}").build("foo#bar");

would result in encoding of the '#' such that the resulting URI is
"foo%23bar". To create a URI "foo#bar" use

UriBuilder.fromPath("{arg1}").fragment("{arg2}").build("foo", "bar")

instead. URI template names and delimiters are never encoded but their
values are encoded when a URI is built.
Template parameter regular expressions are ignored when building a URI, i.e.
no validation is performed.

path

Append path to the existing path.
When constructing the final path, a '/' separator will be inserted
between the existing path and the supplied path if necessary.
Existing '/' characters are preserved thus a single value can
represent multiple URI path segments.

path

Append the path from a Path-annotated method to the
existing path.
When constructing the final path, a '/' separator will be inserted
between the existing path and the supplied path if necessary.
This method is a convenience shortcut to path(Method), it
can only be used in cases where there is a single method with the
specified name that is annotated with Path.

Parameters:

resource - the resource containing the method

method - the name of the method whose Path value will be
used to obtain the path to append

Returns:

the updated UriBuilder

Throws:

java.lang.IllegalArgumentException - if resource or method is null,
or there is more than or less than one variant of the method annotated with
Path

segment

Append path segments to the existing path.
When constructing the final path, a '/' separator will be inserted
between the existing path and the first path segment if necessary and
each supplied segment will also be separated by '/'.
Existing '/' characters are encoded thus a single value can
only represent a single URI path segment.

replaceMatrix

Set the matrix parameters of the current final segment of the current URI path.
This method will overwrite any existing matrix parameters on the current final
segment of the current URI path. Note that the matrix parameters
are tied to a particular path segment; subsequent addition of path segments
will not affect their position in the URI path.

Parameters:

matrix - the matrix parameters, may contain URI template parameters.
A null value will remove all matrix parameters of the current final segment
of the current URI path.

matrixParam

Append a matrix parameter to the existing set of matrix parameters of
the current final segment of the URI path. If multiple values are supplied
the parameter will be added once per value. Note that the matrix parameters
are tied to a particular path segment; subsequent addition of path segments
will not affect their position in the URI path.

Parameters:

name - the matrix parameter name, may contain URI template parameters

values - the matrix parameter value(s), each object will be converted
to a String using its toString() method. Stringified
values may contain URI template parameters.

replaceMatrixParam

Replace the existing value(s) of a matrix parameter on
the current final segment of the URI path. If multiple values are supplied
the parameter will be added once per value. Note that the matrix parameters
are tied to a particular path segment; subsequent addition of path segments
will not affect their position in the URI path.

Parameters:

name - the matrix parameter name, may contain URI template parameters

values - the matrix parameter value(s), each object will be converted
to a String using its toString() method. Stringified
values may contain URI template parameters. If values is empty
or null then all current values of the parameter are removed.

replaceQueryParam

Replace the existing value(s) of a query parameter. If
multiple values are supplied the parameter will be added once per value.

Parameters:

name - the query parameter name, may contain URI template parameters

values - the query parameter value(s), each object will be converted
to a String using its toString() method. Stringified
values may contain URI template parameters. If values is empty
or null then all current values of the parameter are removed.

buildFromMap

Build a URI, any URI template parameters will be replaced by the value in
the supplied map. Values are converted to String using
their toString method and are then encoded to match the
rules of the URI component to which they pertain. All '%' characters
in the stringified values will be encoded.
The state of the builder is unaffected; this method may be called
multiple times on the same builder instance.

Parameters:

values - a map of URI template parameter names and values

Returns:

the URI built from the UriBuilder

Throws:

java.lang.IllegalArgumentException - if there are any URI template parameters
without a supplied value, or if a template parameter value is null.

UriBuilderException - if a URI cannot be constructed based on the
current state of the builder.

buildFromEncodedMap

Build a URI, any URI template parameters will be replaced by the value in
the supplied map. Values are converted to String using
their toString method and are then encoded to match the
rules of the URI component to which they pertain. All % characters in
the stringified values that are not followed by two hexadecimal numbers
will be encoded.
The state of the builder is unaffected; this method may be called
multiple times on the same builder instance.

Parameters:

values - a map of URI template parameter names and values

Returns:

the URI built from the UriBuilder

Throws:

java.lang.IllegalArgumentException - if there are any URI template parameters
without a supplied value, or if a template parameter value is null.

UriBuilderException - if a URI cannot be constructed based on the
current state of the builder.

build

Build a URI, using the supplied values in order to replace any URI
template parameters. Values are converted to String using
their toString method and are then encoded to match the
rules of the URI component to which they pertain. All '%' characters
in the stringified values will be encoded.
The state of the builder is unaffected; this method may be called
multiple times on the same builder instance.

All instances of the same template parameter
will be replaced by the same value that corresponds to the position of the
first instance of the template parameter. e.g. the template "{a}/{b}/{a}"
with values {"x", "y", "z"} will result in the the URI "x/y/x", not
"x/y/z".

Parameters:

values - a list of URI template parameter values

Returns:

the URI built from the UriBuilder

Throws:

java.lang.IllegalArgumentException - if there are any URI template parameters
without a supplied value, or if a value is null.

UriBuilderException - if a URI cannot be constructed based on the
current state of the builder.

buildFromEncoded

Build a URI.
Any URI templates parameters will be replaced with the supplied values in
order. Values are converted to String using
their toString method and are then encoded to match the
rules of the URI component to which they pertain. All % characters in
the stringified values that are not followed by two hexadecimal numbers
will be encoded.
The state of the builder is unaffected; this method may be called
multiple times on the same builder instance.

All instances of the same template parameter
will be replaced by the same value that corresponds to the position of the
first instance of the template parameter. e.g. the template "{a}/{b}/{a}"
with values {"x", "y", "z"} will result in the the URI "x/y/x", not
"x/y/z".

Parameters:

values - a list of URI template parameter values

Returns:

the URI built from the UriBuilder

Throws:

java.lang.IllegalArgumentException - if there are any URI template parameters
without a supplied value, or if a value is null.

UriBuilderException - if a URI cannot be constructed based on the
current state of the builder.