Package org.springframework.web.filter

# Class CharacterEncodingFilter

java.lang.Object
org.springframework.web.filter.GenericFilterBean
org.springframework.web.filter.OncePerRequestFilter
org.springframework.web.filter.CharacterEncodingFilter

All Implemented Interfaces:
  `Filter`, `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.BeanNameAware`, `org.springframework.beans.factory.DisposableBean`, `org.springframework.beans.factory.InitializingBean`, `org.springframework.context.EnvironmentAware`, `org.springframework.core.env.EnvironmentCapable`, `ServletContextAware`

public class CharacterEncodingFilter extends OncePerRequestFilter
Servlet Filter that allows one to specify a character encoding for requests. This is useful because current browsers typically do not set a character encoding even if specified in the HTML page or form.

This filter can either apply its encoding if the request does not already specify an encoding, or enforce this filter's encoding in any case ("forceEncoding"="true"). In the latter case, the encoding will also be applied as default response encoding (although this will usually be overridden by a full content type set in the view).

Since:
  15.03.2004
Author:
  Juergen Hoeller
See Also:
  - `setEncoding(java.lang.String)`
  - `setForceEncoding(boolean)`
  - `ServletRequest.setCharacterEncoding(String)`
  - `ServletResponse.setCharacterEncoding(String)`

## Field Summary

### Fields inherited from class org.springframework.web.filter.OncePerRequestFilter

`ALREADY_FILTERED_SUFFIX`

### Fields inherited from class org.springframework.web.filter.GenericFilterBean

`logger`

## Constructor Summary

Constructors
Constructor
Description
`CharacterEncodingFilter()`
Create a default `CharacterEncodingFilter`, with the encoding to be set via `setEncoding(java.lang.String)`.
`CharacterEncodingFilter(String encoding)`
Create a `CharacterEncodingFilter` for the given encoding.
`CharacterEncodingFilter(String encoding, boolean forceEncoding)`
Create a `CharacterEncodingFilter` for the given encoding.
`CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding)`
Create a `CharacterEncodingFilter` for the given encoding.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)`
Same contract as for `doFilter`, but guaranteed to be just invoked once per request within a single request thread.
`String`
`getEncoding()`
Return the configured encoding for requests and/or responses.
`boolean`
`isForceRequestEncoding()`
Return whether the encoding should be forced on requests.
`boolean`
`isForceResponseEncoding()`
Return whether the encoding should be forced on responses.
`void`
`setEncoding(String encoding)`
Set the encoding to use for requests.
`void`
`setForceEncoding(boolean forceEncoding)`
Set whether the configured `encoding` of this filter is supposed to override existing request and response encodings.
`void`
`setForceRequestEncoding(boolean forceRequestEncoding)`
Set whether the configured `encoding` of this filter is supposed to override existing request encodings.
`void`
`setForceResponseEncoding(boolean forceResponseEncoding)`
Set whether the configured `encoding` of this filter is supposed to override existing response encodings.

### Methods inherited from class org.springframework.web.filter.OncePerRequestFilter

`doFilter, doFilterNestedErrorDispatch, getAlreadyFilteredAttributeName, isAsyncDispatch, isAsyncStarted, shouldNotFilter, shouldNotFilterAsyncDispatch, shouldNotFilterErrorDispatch`

### Methods inherited from class org.springframework.web.filter.GenericFilterBean

`addRequiredProperty, afterPropertiesSet, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext`

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

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

## Constructor Details

### CharacterEncodingFilter

public CharacterEncodingFilter()
Create a default `CharacterEncodingFilter`, with the encoding to be set via `setEncoding(java.lang.String)`.

See Also:
  - `setEncoding(java.lang.String)`

### CharacterEncodingFilter

public CharacterEncodingFilter(String encoding)
Create a `CharacterEncodingFilter` for the given encoding.

Parameters:
  `encoding` - the encoding to apply
Since:
  4.2.3
See Also:
  - `setEncoding(java.lang.String)`

### CharacterEncodingFilter

public CharacterEncodingFilter(String encoding, boolean forceEncoding)
Create a `CharacterEncodingFilter` for the given encoding.

Parameters:
  `encoding` - the encoding to apply
  `forceEncoding` - whether the specified encoding is supposed to override existing request and response encodings
Since:
  4.2.3
See Also:
  - `setEncoding(java.lang.String)`
  - `setForceEncoding(boolean)`

### CharacterEncodingFilter

public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding)
Create a `CharacterEncodingFilter` for the given encoding.

Parameters:
  `encoding` - the encoding to apply
  `forceRequestEncoding` - whether the specified encoding is supposed to override existing request encodings
  `forceResponseEncoding` - whether the specified encoding is supposed to override existing response encodings
Since:
  4.3
See Also:
  - `setEncoding(java.lang.String)`
  - `setForceRequestEncoding(boolean)`
  - `setForceResponseEncoding(boolean)`

## Method Details

### setEncoding

public void setEncoding(@Nullable String encoding)
Set the encoding to use for requests. This encoding will be passed into a `ServletRequest.setCharacterEncoding(java.lang.String)` call.

Whether this encoding will override existing request encodings (and whether it will be applied as default response encoding as well) depends on the `"forceEncoding"` flag.

### getEncoding

@Nullable public String getEncoding()
Return the configured encoding for requests and/or responses.

Since:
  4.3

### setForceEncoding

public void setForceEncoding(boolean forceEncoding)
Set whether the configured `encoding` of this filter is supposed to override existing request and response encodings.

Default is "false", i.e. do not modify the encoding if `ServletRequest.getCharacterEncoding()` returns a non-null value. Switch this to "true" to enforce the specified encoding in any case, applying it as default response encoding as well.

This is the equivalent to setting both `setForceRequestEncoding(boolean)` and `setForceResponseEncoding(boolean)`.

See Also:
  - `setForceRequestEncoding(boolean)`
  - `setForceResponseEncoding(boolean)`

### setForceRequestEncoding

public void setForceRequestEncoding(boolean forceRequestEncoding)
Set whether the configured `encoding` of this filter is supposed to override existing request encodings.

Default is "false", i.e. do not modify the encoding if `ServletRequest.getCharacterEncoding()` returns a non-null value. Switch this to "true" to enforce the specified encoding in any case.

Since:
  4.3

### isForceRequestEncoding

public boolean isForceRequestEncoding()
Return whether the encoding should be forced on requests.

Since:
  4.3

### setForceResponseEncoding

public void setForceResponseEncoding(boolean forceResponseEncoding)
Set whether the configured `encoding` of this filter is supposed to override existing response encodings.

Default is "false", i.e. do not modify the encoding. Switch this to "true" to enforce the specified encoding for responses in any case.

Since:
  4.3

### isForceResponseEncoding

public boolean isForceResponseEncoding()
Return whether the encoding should be forced on responses.

Since:
  4.3

### doFilterInternal

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException
Description copied from class: `OncePerRequestFilter`
Same contract as for `doFilter`, but guaranteed to be just invoked once per request within a single request thread. See `OncePerRequestFilter.shouldNotFilterAsyncDispatch()` for details.

Provides HttpServletRequest and HttpServletResponse arguments instead of the default ServletRequest and ServletResponse ones.

Specified by:
  `doFilterInternal` in class `OncePerRequestFilter`
Throws:
  `ServletException`
  `IOException`