org.springframework.web.servlet.support

## Class ServletUriComponentsBuilder

- java.lang.Object
- - org.springframework.web.util.UriComponentsBuilder
  - - org.springframework.web.servlet.support.ServletUriComponentsBuilder

- All Implemented Interfaces:
    Cloneable, UriBuilder

      public class ServletUriComponentsBuilder
      extends UriComponentsBuilder

  UriComponentsBuilder with additional static factory methods to create links based on the current HttpServletRequest.

  Note: As of 5.1, methods in this class do not extract `"Forwarded"` and `"X-Forwarded-*"` headers that specify the client-originated address. Please, use `ForwardedHeaderFilter`, or similar from the underlying server, to extract and use such headers, or to discard them.

  Since:
    3.1
  Author:
    Rossen Stoyanchev

- - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `ServletUriComponentsBuilder()` Default constructor.
    `protected` | `ServletUriComponentsBuilder(ServletUriComponentsBuilder other)` Create a deep copy of the given ServletUriComponentsBuilder.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ServletUriComponentsBuilder` | `cloneBuilder()` Clone this `UriComponentsBuilder`.
    `static ServletUriComponentsBuilder` | `fromContextPath(HttpServletRequest request)` Prepare a builder from the host, port, scheme, and context path of the given HttpServletRequest.
    `static ServletUriComponentsBuilder` | `fromCurrentContextPath()` Same as `fromContextPath(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.
    `static ServletUriComponentsBuilder` | `fromCurrentRequest()` Same as `fromRequest(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.
    `static ServletUriComponentsBuilder` | `fromCurrentRequestUri()` Same as `fromRequestUri(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.
    `static ServletUriComponentsBuilder` | `fromCurrentServletMapping()` Same as `fromServletMapping(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.
    `static ServletUriComponentsBuilder` | `fromRequest(HttpServletRequest request)` Prepare a builder by copying the scheme, host, port, path, and query string of an HttpServletRequest.
    `static ServletUriComponentsBuilder` | `fromRequestUri(HttpServletRequest request)` Prepare a builder from the host, port, scheme, and path (but not the query) of the HttpServletRequest.
    `static ServletUriComponentsBuilder` | `fromServletMapping(HttpServletRequest request)` Prepare a builder from the host, port, scheme, context path, and servlet mapping of the given HttpServletRequest.
    `protected static HttpServletRequest` | `getCurrentRequest()` Obtain current request through `RequestContextHolder`.
    `String` | `removePathExtension()` Remove any path extension from the `requestURI`.

    - ### Methods inherited from class org.springframework.web.util.UriComponentsBuilder

      `build, build, build, build, buildAndExpand, buildAndExpand, clone, encode, encode, fragment, fromHttpRequest, fromHttpUrl, fromOriginHeader, fromPath, fromUri, fromUriString, host, newInstance, parseForwardedFor, path, pathSegment, port, port, query, queryParam, queryParam, queryParamIfPresent, queryParams, replacePath, replaceQuery, replaceQueryParam, replaceQueryParam, replaceQueryParams, scheme, schemeSpecificPart, toUriString, uri, uriComponents, uriVariables, userInfo`

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

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

- - ### Constructor Detail

    - #### ServletUriComponentsBuilder

          protected ServletUriComponentsBuilder()

      Default constructor. Protected to prevent direct instantiation.
      See Also:
        `fromContextPath(HttpServletRequest)`, `fromServletMapping(HttpServletRequest)`, `fromRequest(HttpServletRequest)`, `fromCurrentContextPath()`, `fromCurrentServletMapping()`, `fromCurrentRequest()`

    - #### ServletUriComponentsBuilder

          protected ServletUriComponentsBuilder(ServletUriComponentsBuilder other)

      Create a deep copy of the given ServletUriComponentsBuilder.
      Parameters:
        `other` - the other builder to copy from

  - ### Method Detail

    - #### fromContextPath

          public static ServletUriComponentsBuilder fromContextPath(HttpServletRequest request)

      Prepare a builder from the host, port, scheme, and context path of the given HttpServletRequest.

    - #### fromServletMapping

          public static ServletUriComponentsBuilder fromServletMapping(HttpServletRequest request)

      Prepare a builder from the host, port, scheme, context path, and servlet mapping of the given HttpServletRequest.

      If the servlet is mapped by name, e.g. `"/main/*"`, the path will end with "/main". If the servlet is mapped otherwise, e.g. `"/"` or `"*.do"`, the result will be the same as if calling `fromContextPath(HttpServletRequest)`.

    - #### fromRequestUri

          public static ServletUriComponentsBuilder fromRequestUri(HttpServletRequest request)

      Prepare a builder from the host, port, scheme, and path (but not the query) of the HttpServletRequest.

    - #### fromRequest

          public static ServletUriComponentsBuilder fromRequest(HttpServletRequest request)

      Prepare a builder by copying the scheme, host, port, path, and query string of an HttpServletRequest.

    - #### fromCurrentContextPath

          public static ServletUriComponentsBuilder fromCurrentContextPath()

      Same as `fromContextPath(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.

    - #### fromCurrentServletMapping

          public static ServletUriComponentsBuilder fromCurrentServletMapping()

      Same as `fromServletMapping(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.

    - #### fromCurrentRequestUri

          public static ServletUriComponentsBuilder fromCurrentRequestUri()

      Same as `fromRequestUri(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.

    - #### fromCurrentRequest

          public static ServletUriComponentsBuilder fromCurrentRequest()

      Same as `fromRequest(HttpServletRequest)` except the request is obtained through `RequestContextHolder`.

    - #### getCurrentRequest

          protected static HttpServletRequest getCurrentRequest()

      Obtain current request through `RequestContextHolder`.

    - #### removePathExtension

          @Nullable
          public String removePathExtension()

      Remove any path extension from the `requestURI`. This method must be invoked before any calls to `UriComponentsBuilder.path(String)` or `UriComponentsBuilder.pathSegment(String...)`.

           GET http://www.foo.example/rest/books/6.json

           ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromRequestUri(this.request);
           String ext = builder.removePathExtension();
           String uri = builder.path("/pages/1.{ext}").buildAndExpand(ext).toUriString();
           assertEquals("http://www.foo.example/rest/books/6/pages/1.json", result);

      Returns:
        the removed path extension for possible re-use, or `null`
      Since:
        4.0

    - #### cloneBuilder

          public ServletUriComponentsBuilder cloneBuilder()

      Description copied from class: `UriComponentsBuilder`
      Clone this `UriComponentsBuilder`.
      Overrides:
        `cloneBuilder` in class `UriComponentsBuilder`
      Returns:
        the cloned `UriComponentsBuilder` object