org.springframework.web.util

## Class UriComponents

- java.lang.Object
- - org.springframework.web.util.UriComponents

- All Implemented Interfaces:
    Serializable

      public abstract class UriComponents
      extends Object
      implements Serializable

  Represents an immutable collection of URI components, mapping component type to String values. Contains convenience getters for all components. Effectively similar to `URI`, but with more powerful encoding options and support for URI template variables.
  Since:
    3.1
  Author:
    Arjen Poutsma, Juergen Hoeller, Rossen Stoyanchev
  See Also:
    `UriComponentsBuilder`, Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `UriComponents.UriTemplateVariables` Defines the contract for URI Template variables.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `UriComponents(String scheme, String fragment)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract void` | `copyToUriComponentsBuilder(UriComponentsBuilder builder)` Set all components of the given UriComponentsBuilder.
    `UriComponents` | `encode()` Invoke this after expanding URI variables to encode the resulting URI component values.
    `abstract UriComponents` | `encode(Charset charset)` A variant of `encode()` with a charset other than "UTF-8".
    `UriComponents` | `expand(Map<String,?> uriVariables)` Replace all URI template variables with the values from a given map.
    `UriComponents` | `expand(Object... uriVariableValues)` Replace all URI template variables with the values from a given array.
    `UriComponents` | `expand(UriComponents.UriTemplateVariables uriVariables)` Replace all URI template variables with the values from the given `UriComponents.UriTemplateVariables`.
    `String` | `getFragment()` Return the fragment.
    `abstract String` | `getHost()` Return the host.
    `abstract String` | `getPath()` Return the path.
    `abstract List<String>` | `getPathSegments()` Return the list of path segments.
    `abstract int` | `getPort()` Return the port.
    `abstract String` | `getQuery()` Return the query.
    `abstract MultiValueMap<String,String>` | `getQueryParams()` Return the map of query parameters.
    `String` | `getScheme()` Return the scheme.
    `abstract String` | `getSchemeSpecificPart()` Return the scheme specific part.
    `abstract String` | `getUserInfo()` Return the user info.
    `abstract UriComponents` | `normalize()` Normalize the path removing sequences like "path/..".
    `String` | `toString()` A simple pass-through to `toUriString()`.
    `abstract URI` | `toUri()` Create a `URI` from this instance as follows:
    `abstract String` | `toUriString()` Concatenate all URI components to return the fully formed URI String.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### UriComponents

          protected UriComponents(@Nullable
                                  String scheme,
                                  @Nullable
                                  String fragment)

  - ### Method Detail

    - #### getScheme

          @Nullable
          public final String getScheme()

      Return the scheme. Can be `null`.

    - #### getFragment

          @Nullable
          public final String getFragment()

      Return the fragment. Can be `null`.

    - #### getSchemeSpecificPart

          @Nullable
          public abstract String getSchemeSpecificPart()

      Return the scheme specific part. Can be `null`.

    - #### getUserInfo

          @Nullable
          public abstract String getUserInfo()

      Return the user info. Can be `null`.

    - #### getHost

          @Nullable
          public abstract String getHost()

      Return the host. Can be `null`.

    - #### getPort

          public abstract int getPort()

      Return the port. `-1` if no port has been set.

    - #### getPath

          @Nullable
          public abstract String getPath()

      Return the path. Can be `null`.

    - #### getPathSegments

          public abstract List<String> getPathSegments()

      Return the list of path segments. Empty if no path has been set.

    - #### getQuery

          @Nullable
          public abstract String getQuery()

      Return the query. Can be `null`.

    - #### getQueryParams

          public abstract MultiValueMap<String,String> getQueryParams()

      Return the map of query parameters. Empty if no query has been set.

    - #### encode

          public final UriComponents encode()

      Invoke this after expanding URI variables to encode the resulting URI component values.

      In comparison to `UriComponentsBuilder.encode()`, this method only replaces non-ASCII and illegal (within a given URI component type) characters, but not characters with reserved meaning. For most cases, `UriComponentsBuilder.encode()` is more likely to give the expected result.

      See Also:
        `UriComponentsBuilder.encode()`

    - #### encode

          public abstract UriComponents encode(Charset charset)

      A variant of `encode()` with a charset other than "UTF-8".
      Parameters:
        `charset` - the charset to use for encoding
      See Also:
        `UriComponentsBuilder.encode(Charset)`

    - #### expand

          public final UriComponents expand(Map<String,?> uriVariables)

      Replace all URI template variables with the values from a given map.

      The given map keys represent variable names; the corresponding values represent variable values. The order of variables is not significant.

      Parameters:
        `uriVariables` - the map of URI variables
      Returns:
        the expanded URI components

    - #### expand

          public final UriComponents expand(Object... uriVariableValues)

      Replace all URI template variables with the values from a given array.

      The given array represents variable values. The order of variables is significant.

      Parameters:
        `uriVariableValues` - the URI variable values
      Returns:
        the expanded URI components

    - #### expand

          public final UriComponents expand(UriComponents.UriTemplateVariables uriVariables)

      Replace all URI template variables with the values from the given `UriComponents.UriTemplateVariables`.
      Parameters:
        `uriVariables` - the URI template values
      Returns:
        the expanded URI components

    - #### normalize

          public abstract UriComponents normalize()

      Normalize the path removing sequences like "path/..". Note that normalization is applied to the full path, and not to individual path segments.
      See Also:
        `StringUtils.cleanPath(String)`

    - #### toUriString

          public abstract String toUriString()

      Concatenate all URI components to return the fully formed URI String.

      This method amounts to simple String concatenation of the current URI component values and as such the result may contain illegal URI characters, for example if URI variables have not been expanded or if encoding has not been applied via `UriComponentsBuilder.encode()` or `encode()`.

    - #### toUri

          public abstract URI toUri()

      Create a `URI` from this instance as follows:

      If the current instance is `encoded`, form the full URI String via `toUriString()`, and then pass it to the single argument `URI` constructor which preserves percent encoding.

      If not yet encoded, pass individual URI component values to the multi-argument `URI` constructor which quotes illegal characters that cannot appear in their respective URI component.

    - #### toString

          public final String toString()

      A simple pass-through to `toUriString()`.
      Overrides:
        `toString` in class `Object`

    - #### copyToUriComponentsBuilder

          protected abstract void copyToUriComponentsBuilder(UriComponentsBuilder builder)

      Set all components of the given UriComponentsBuilder.
      Since:
        4.2