Relative Servlet Requests

    你可以使用 ServletUriComponentsBuilder 来创建相对于当前请求的 URI,如下例所示:

    1. HttpServletRequest request = ...
    2. // 会利用 request 中的 host, scheme, port, path and query string... 来构建 URI
    3. ServletUriComponentsBuilder ucb = ServletUriComponentsBuilder.fromRequest(request)
    4. .replaceQueryParam("accountId", "{id}").build()
    5. .expand("123")
    6. .encode();

    你可以创建相对于上下文路径的 URI,如下例所示:

    1. // Re-uses host, port and context path...
    2. ServletUriComponentsBuilder ucb = ServletUriComponentsBuilder.fromContextPath(request)
    3. .path("/accounts").build()

    你可以创建相对于 Servlet 的 URI(例如,/main/*),如下例所示:

    1. // Re-uses host, port, context path, and Servlet prefix...
    2. ServletUriComponentsBuilder ucb = ServletUriComponentsBuilder.fromServletMapping(request)
    3. .path("/accounts").build()

    :::info 从 5.1 开始,ServletUriComponentsBuilder 忽略了来自 Forwarded 和 X-Forwarded-* 头的信息,这些头指定了客户端来源的地址。考虑使用ForwardedHeaderFilter 来提取和使用或丢弃这些头信息。 :::