org.springframework.web.reactive.result.view

## Class RedirectView

- java.lang.Object
- - org.springframework.web.reactive.result.view.AbstractView
  - - org.springframework.web.reactive.result.view.AbstractUrlBasedView
    - - org.springframework.web.reactive.result.view.RedirectView

All Implemented Interfaces:
  org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, View

    public class RedirectView
    extends AbstractUrlBasedView

View that redirects to an absolute or context relative URL. The URL may be a URI template in which case the URI template variables will be replaced with values from the model or with URI variables from the current request.

By default `HttpStatus.SEE_OTHER` is used but alternate status codes may be via constructor or setters arguments.

Since:
  5.0
Author:
  Sebastien Deleuze, Rossen Stoyanchev

### Field Summary

### Fields inherited from class org.springframework.web.reactive.result.view.AbstractView

`logger, REQUEST_DATA_VALUE_PROCESSOR_BEAN_NAME`

### Fields inherited from interface org.springframework.web.reactive.result.view.View

`BINDING_CONTEXT_ATTRIBUTE`

### Constructor Summary

Constructors
Constructor and Description
`RedirectView()` Constructor for use as a bean.
`RedirectView(String redirectUrl)` Create a new `RedirectView` with the given redirect URL.
`RedirectView(String redirectUrl, org.springframework.http.HttpStatus statusCode)` Create a new `RedirectView` with the given URL and an alternate redirect status code such as `HttpStatus.TEMPORARY_REDIRECT` or `HttpStatus.PERMANENT_REDIRECT`.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `afterPropertiesSet()`
`protected StringBuilder` `appendCurrentRequestQuery(String targetUrl, org.springframework.http.server.reactive.ServerHttpRequest request)` Append the query of the current request to the target redirect URL.
`boolean` `checkResourceExists(Locale locale)` Check whether the resource for the configured URL actually exists.
`protected String` `createTargetUrl(Map<String,Object> model, org.springframework.web.server.ServerWebExchange exchange)` Create the target URL and, if necessary, pre-pend the contextPath, expand URI template variables, append the current request query, and apply the configured `RequestDataValueProcessor`.
`protected StringBuilder` `expandTargetUrlTemplate(String targetUrl, Map<String,Object> model, Map<String,String> uriVariables)` Expand URI template variables in the target URL with either model attribute values or as a fallback with URI variable values from the current request.
`String[]` `getHosts()` Return the configured application hosts.
`org.springframework.http.HttpStatus` `getStatusCode()` Get the redirect status code to use.
`boolean` `isContextRelative()` Whether to interpret URLs as relative to the current context path.
`boolean` `isPropagateQuery()` Whether the query string of the current URL is appended to the redirect URL.
`boolean` `isRedirectView()` Whether this View does rendering by performing a redirect.
`protected boolean` `isRemoteHost(String targetUrl)` Whether the given targetUrl has a host that is a "foreign" system in which case `HttpServletResponse.encodeRedirectURL(java.lang.String)` will not be applied.
`protected reactor.core.publisher.Mono<Void>` `renderInternal(Map<String,Object> model, org.springframework.http.MediaType contentType, org.springframework.web.server.ServerWebExchange exchange)` Convert model to request parameters and redirect to the given URL.
`protected reactor.core.publisher.Mono<Void>` `sendRedirect(String targetUrl, org.springframework.web.server.ServerWebExchange exchange)` Send a redirect back to the HTTP client.
`void` `setContextRelative(boolean contextRelative)` Whether to interpret a given redirect URLs that starts with a slash ("/") as relative to the current context path (`true`, the default) or to the web server root (`false`).
`void` `setHosts(String... hosts)` Configure one or more hosts associated with the application.
`void` `setPropagateQuery(boolean propagateQuery)` Whether to append the query string of the current URL to the redirect URL (`true`) or not (`false`, the default).
`void` `setStatusCode(org.springframework.http.HttpStatus statusCode)` Set an alternate redirect status code such as `HttpStatus.TEMPORARY_REDIRECT` or `HttpStatus.PERMANENT_REDIRECT`.

### Methods inherited from class org.springframework.web.reactive.result.view.AbstractUrlBasedView

`getUrl, setUrl, toString`

### Methods inherited from class org.springframework.web.reactive.result.view.AbstractView

`createRequestContext, formatViewName, getApplicationContext, getBeanName, getDefaultCharset, getModelAttributes, getRequestContextAttribute, getRequestDataValueProcessor, getSupportedMediaTypes, obtainApplicationContext, render, resolveAsyncAttributes, resolveAsyncAttributes, setApplicationContext, setBeanName, setDefaultCharset, setRequestContextAttribute, setSupportedMediaTypes`

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

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

### Constructor Detail

#### RedirectView

    public RedirectView()

Constructor for use as a bean.

#### RedirectView

    public RedirectView(String redirectUrl)

Create a new `RedirectView` with the given redirect URL. Status code `HttpStatus.SEE_OTHER` is used by default.

#### RedirectView

    public RedirectView(String redirectUrl,
                        org.springframework.http.HttpStatus statusCode)

Create a new `RedirectView` with the given URL and an alternate redirect status code such as `HttpStatus.TEMPORARY_REDIRECT` or `HttpStatus.PERMANENT_REDIRECT`.

### Method Detail

#### setStatusCode

    public void setStatusCode(org.springframework.http.HttpStatus statusCode)

Set an alternate redirect status code such as `HttpStatus.TEMPORARY_REDIRECT` or `HttpStatus.PERMANENT_REDIRECT`.

#### getStatusCode

    public org.springframework.http.HttpStatus getStatusCode()

Get the redirect status code to use.

#### setContextRelative

    public void setContextRelative(boolean contextRelative)

Whether to interpret a given redirect URLs that starts with a slash ("/") as relative to the current context path (`true`, the default) or to the web server root (`false`).

#### isContextRelative

    public boolean isContextRelative()

Whether to interpret URLs as relative to the current context path.

#### setPropagateQuery

    public void setPropagateQuery(boolean propagateQuery)

Whether to append the query string of the current URL to the redirect URL (`true`) or not (`false`, the default).

#### isPropagateQuery

    public boolean isPropagateQuery()

Whether the query string of the current URL is appended to the redirect URL.

#### setHosts

    public void setHosts(@Nullable
                         String... hosts)

Configure one or more hosts associated with the application. All other hosts will be considered external hosts.

In effect this provides a way turn off encoding for URLs that have a host and that host is not listed as a known host.

If not set (the default) all redirect URLs are encoded.

Parameters:
  `hosts` - one or more application hosts

#### getHosts

    @Nullable
    public String[] getHosts()

Return the configured application hosts.

#### afterPropertiesSet

    public void afterPropertiesSet()
                            throws Exception

Specified by:
  `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
Overrides:
  `afterPropertiesSet` in class `AbstractUrlBasedView`
Throws:
  `Exception`

#### isRedirectView

    public boolean isRedirectView()

Description copied from interface: `View`
Whether this View does rendering by performing a redirect.

#### checkResourceExists

    public boolean checkResourceExists(Locale locale)
                                throws Exception

Description copied from class: `AbstractUrlBasedView`
Check whether the resource for the configured URL actually exists.

Specified by:
  `checkResourceExists` in class `AbstractUrlBasedView`
Parameters:
  `locale` - the desired Locale that we're looking for
Returns:
  `false` if the resource exists `false` if we know that it does not exist
Throws:
  `Exception` - if the resource exists but is invalid (e.g. could not be parsed)

#### renderInternal

    protected reactor.core.publisher.Mono<Void> renderInternal(Map<String,Object> model,
                                                               @Nullable
                                                               org.springframework.http.MediaType contentType,
                                                               org.springframework.web.server.ServerWebExchange exchange)

Convert model to request parameters and redirect to the given URL.

Specified by:
  `renderInternal` in class `AbstractView`
Parameters:
  `model` - combined output Map (never `null`), with dynamic values taking precedence over static attributes
  `contentType` - the content type selected to render with, which should match one of the supported media types
  `exchange` - current exchange
Returns:
  a `Mono` that represents when and if rendering succeeds

#### createTargetUrl

    protected final String createTargetUrl(Map<String,Object> model,
                                           org.springframework.web.server.ServerWebExchange exchange)

Create the target URL and, if necessary, pre-pend the contextPath, expand URI template variables, append the current request query, and apply the configured `RequestDataValueProcessor`.

#### expandTargetUrlTemplate

    protected StringBuilder expandTargetUrlTemplate(String targetUrl,
                                                    Map<String,Object> model,
                                                    Map<String,String> uriVariables)

Expand URI template variables in the target URL with either model attribute values or as a fallback with URI variable values from the current request. Values are encoded.

#### appendCurrentRequestQuery

    protected StringBuilder appendCurrentRequestQuery(String targetUrl,
                                                      org.springframework.http.server.reactive.ServerHttpRequest request)

Append the query of the current request to the target redirect URL.

#### sendRedirect

    protected reactor.core.publisher.Mono<Void> sendRedirect(String targetUrl,
                                                             org.springframework.web.server.ServerWebExchange exchange)

Send a redirect back to the HTTP client.

Parameters:
  `targetUrl` - the target URL to redirect to
  `exchange` - current exchange

#### isRemoteHost

    protected boolean isRemoteHost(String targetUrl)

Whether the given targetUrl has a host that is a "foreign" system in which case `HttpServletResponse.encodeRedirectURL(java.lang.String)` will not be applied. This method returns `true` if the `setHosts(String[])` property is configured and the target URL has a host that does not match.

Parameters:
  `targetUrl` - the target redirect URL
Returns:
  `true` the target URL has a remote host, `false` if it the URL does not have a host or the "host" property is not configured.