Package org.springframework.web.util

# Class UriUtils

java.lang.Object
org.springframework.web.util.UriUtils

public abstract class UriUtils extends Object
Utility methods for URI encoding and decoding based on RFC 3986.

There are two types of encode methods:

- `"encodeXyz"` -- these encode a specific URI component (for example, path, query) by percent encoding illegal characters, which includes non-US-ASCII characters, and also characters that are otherwise illegal within the given URI component type, as defined in RFC 3986. The effect of this method, with regards to encoding, is comparable to using the multi-argument constructor of `URI`.
- `"encode"` and `"encodeUriVariables"` -- these can be used to encode URI variable values by percent encoding all characters that are either illegal, or have any reserved meaning, anywhere within a URI.

Since:
  3.0
Author:
  Arjen Poutsma, Juergen Hoeller, Rossen Stoyanchev
See Also:
  - RFC 3986

## Constructor Summary

Constructors
Constructor
Description
`UriUtils()`

## Method Summary

Modifier and Type
Method
Description
`static String`
`decode(String source, String encoding)`
Decode the given encoded URI component.
`static String`
`decode(String source, Charset charset)`
Decode the given encoded URI component.
`static String`
`encode(String source, String encoding)`
Variant of `encode(String, Charset)` with a String charset.
`static String`
`encode(String source, Charset charset)`
Encode all characters that are either illegal, or have any reserved meaning, anywhere within a URI, as defined in RFC 3986.
`static String`
`encodeAuthority(String authority, String encoding)`
Encode the given URI authority with the given encoding.
`static String`
`encodeAuthority(String authority, Charset charset)`
Encode the given URI authority with the given encoding.
`static String`
`encodeFragment(String fragment, String encoding)`
Encode the given URI fragment with the given encoding.
`static String`
`encodeFragment(String fragment, Charset charset)`
Encode the given URI fragment with the given encoding.
`static String`
`encodeHost(String host, String encoding)`
Encode the given URI host with the given encoding.
`static String`
`encodeHost(String host, Charset charset)`
Encode the given URI host with the given encoding.
`static String`
`encodePath(String path, String encoding)`
Encode the given URI path with the given encoding.
`static String`
`encodePath(String path, Charset charset)`
Encode the given URI path with the given encoding.
`static String`
`encodePathSegment(String segment, String encoding)`
Encode the given URI path segment with the given encoding.
`static String`
`encodePathSegment(String segment, Charset charset)`
Encode the given URI path segment with the given encoding.
`static String`
`encodePort(String port, String encoding)`
Encode the given URI port with the given encoding.
`static String`
`encodePort(String port, Charset charset)`
Encode the given URI port with the given encoding.
`static String`
`encodeQuery(String query, String encoding)`
Encode the given URI query with the given encoding.
`static String`
`encodeQuery(String query, Charset charset)`
Encode the given URI query with the given encoding.
`static String`
`encodeQueryParam(String queryParam, String encoding)`
Encode the given URI query parameter with the given encoding.
`static String`
`encodeQueryParam(String queryParam, Charset charset)`
Encode the given URI query parameter with the given encoding.
`static org.springframework.util.MultiValueMap<String,String>`
`encodeQueryParams(org.springframework.util.MultiValueMap<String,String> params)`
Encode the query parameters from the given `MultiValueMap` with UTF-8.
`static String`
`encodeScheme(String scheme, String encoding)`
Encode the given URI scheme with the given encoding.
`static String`
`encodeScheme(String scheme, Charset charset)`
Encode the given URI scheme with the given encoding.
`static Object[]`
`encodeUriVariables(Object... uriVariables)`
Convenience method to apply `encode(String, Charset)` to all given URI variable values.
`static Map<String,String>`
`encodeUriVariables(Map<String,?> uriVariables)`
Convenience method to apply `encode(String, Charset)` to all given URI variable values.
`static String`
`encodeUserInfo(String userInfo, String encoding)`
Encode the given URI user info with the given encoding.
`static String`
`encodeUserInfo(String userInfo, Charset charset)`
Encode the given URI user info with the given encoding.
`static String`
`extractFileExtension(String path)`
Extract the file extension from the given URI path.

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

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

## Constructor Details

### UriUtils

public UriUtils()

## Method Details

### encodeScheme

public static String encodeScheme(String scheme, String encoding)
Encode the given URI scheme with the given encoding.

Parameters:
  `scheme` - the scheme to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded scheme

### encodeScheme

public static String encodeScheme(String scheme, Charset charset)
Encode the given URI scheme with the given encoding.

Parameters:
  `scheme` - the scheme to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded scheme
Since:
  5.0

### encodeAuthority

public static String encodeAuthority(String authority, String encoding)
Encode the given URI authority with the given encoding.

Parameters:
  `authority` - the authority to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded authority

### encodeAuthority

public static String encodeAuthority(String authority, Charset charset)
Encode the given URI authority with the given encoding.

Parameters:
  `authority` - the authority to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded authority
Since:
  5.0

### encodeUserInfo

public static String encodeUserInfo(String userInfo, String encoding)
Encode the given URI user info with the given encoding.

Parameters:
  `userInfo` - the user info to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded user info

### encodeUserInfo

public static String encodeUserInfo(String userInfo, Charset charset)
Encode the given URI user info with the given encoding.

Parameters:
  `userInfo` - the user info to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded user info
Since:
  5.0

### encodeHost

public static String encodeHost(String host, String encoding)
Encode the given URI host with the given encoding.

Parameters:
  `host` - the host to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded host

### encodeHost

public static String encodeHost(String host, Charset charset)
Encode the given URI host with the given encoding.

Parameters:
  `host` - the host to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded host
Since:
  5.0

### encodePort

public static String encodePort(String port, String encoding)
Encode the given URI port with the given encoding.

Parameters:
  `port` - the port to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded port

### encodePort

public static String encodePort(String port, Charset charset)
Encode the given URI port with the given encoding.

Parameters:
  `port` - the port to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded port
Since:
  5.0

### encodePath

public static String encodePath(String path, String encoding)
Encode the given URI path with the given encoding.

Parameters:
  `path` - the path to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded path

### encodePath

public static String encodePath(String path, Charset charset)
Encode the given URI path with the given encoding.

Parameters:
  `path` - the path to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded path
Since:
  5.0

### encodePathSegment

public static String encodePathSegment(String segment, String encoding)
Encode the given URI path segment with the given encoding.

Parameters:
  `segment` - the segment to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded segment

### encodePathSegment

public static String encodePathSegment(String segment, Charset charset)
Encode the given URI path segment with the given encoding.

Parameters:
  `segment` - the segment to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded segment
Since:
  5.0

### encodeQuery

public static String encodeQuery(String query, String encoding)
Encode the given URI query with the given encoding.

Parameters:
  `query` - the query to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded query

### encodeQuery

public static String encodeQuery(String query, Charset charset)
Encode the given URI query with the given encoding.

Parameters:
  `query` - the query to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded query
Since:
  5.0

### encodeQueryParam

public static String encodeQueryParam(String queryParam, String encoding)
Encode the given URI query parameter with the given encoding.

Parameters:
  `queryParam` - the query parameter to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded query parameter

### encodeQueryParam

public static String encodeQueryParam(String queryParam, Charset charset)
Encode the given URI query parameter with the given encoding.

Parameters:
  `queryParam` - the query parameter to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded query parameter
Since:
  5.0

### encodeQueryParams

public static org.springframework.util.MultiValueMap<String,String> encodeQueryParams(org.springframework.util.MultiValueMap<String,String> params)
Encode the query parameters from the given `MultiValueMap` with UTF-8.

This can be used with `UriComponentsBuilder.queryParams(MultiValueMap)` when building a URI from an already encoded template.

     MultiValueMap<String, String> params = new LinkedMultiValueMap<>(2);
     // add to params...

     ServletUriComponentsBuilder.fromCurrentRequest()
             .queryParams(UriUtils.encodeQueryParams(params))
             .build(true)
             .toUriString();

Parameters:
  `params` - the parameters to encode
Returns:
  a new `MultiValueMap` with the encoded names and values
Since:
  5.2.3

### encodeFragment

public static String encodeFragment(String fragment, String encoding)
Encode the given URI fragment with the given encoding.

Parameters:
  `fragment` - the fragment to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded fragment

### encodeFragment

public static String encodeFragment(String fragment, Charset charset)
Encode the given URI fragment with the given encoding.

Parameters:
  `fragment` - the fragment to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded fragment
Since:
  5.0

### encode

public static String encode(String source, String encoding)
Variant of `encode(String, Charset)` with a String charset.

Parameters:
  `source` - the String to be encoded
  `encoding` - the character encoding to encode to
Returns:
  the encoded String

### encode

public static String encode(String source, Charset charset)
Encode all characters that are either illegal, or have any reserved meaning, anywhere within a URI, as defined in RFC 3986. This is useful to ensure that the given String will be preserved as-is and will not have any impact on the structure or meaning of the URI.

Parameters:
  `source` - the String to be encoded
  `charset` - the character encoding to encode to
Returns:
  the encoded String
Since:
  5.0

### encodeUriVariables

public static Map<String,String> encodeUriVariables(Map<String,?> uriVariables)
Convenience method to apply `encode(String, Charset)` to all given URI variable values.

Parameters:
  `uriVariables` - the URI variable values to be encoded
Returns:
  the encoded String
Since:
  5.0

### encodeUriVariables

public static Object[] encodeUriVariables(Object... uriVariables)
Convenience method to apply `encode(String, Charset)` to all given URI variable values.

Parameters:
  `uriVariables` - the URI variable values to be encoded
Returns:
  the encoded String
Since:
  5.0

### decode

public static String decode(String source, String encoding)
Decode the given encoded URI component.

See `StringUtils.uriDecode(String, Charset)` for the decoding rules.

Parameters:
  `source` - the encoded String
  `encoding` - the character encoding to use
Returns:
  the decoded value
Throws:
  `IllegalArgumentException` - when the given source contains invalid encoded sequences
See Also:
  - `StringUtils.uriDecode(String, Charset)`
  - `URLDecoder.decode(String, String)`

### decode

public static String decode(String source, Charset charset)
Decode the given encoded URI component.

See `StringUtils.uriDecode(String, Charset)` for the decoding rules.

Parameters:
  `source` - the encoded String
  `charset` - the character encoding to use
Returns:
  the decoded value
Throws:
  `IllegalArgumentException` - when the given source contains invalid encoded sequences
Since:
  5.0
See Also:
  - `StringUtils.uriDecode(String, Charset)`
  - `URLDecoder.decode(String, String)`

### extractFileExtension

@Nullable public static String extractFileExtension(String path)
Extract the file extension from the given URI path.

Parameters:
  `path` - the URI path (for example, "/products/index.html")
Returns:
  the extracted file extension (for example, "html")
Since:
  4.3.2