From 64a8dfbd12b1e8d60cf8b282de5cdbb912dcb051 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 26 Oct 2015 22:48:54 +0100 Subject: [PATCH] CharacterEncodingFilter provides convenience constructors for Servlet 3.0 style usage Issue: SPR-13572 --- .../web/filter/CharacterEncodingFilter.java | 36 +++++++++++++++++++ .../filter/CharacterEncodingFilterTests.java | 17 ++++----- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java index ece091f7944..56a7c89930c 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java @@ -22,6 +22,8 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.util.Assert; + /** * Servlet Filter that allows one to specify a character encoding for requests. * This is useful because current browsers typically do not set a character @@ -47,6 +49,40 @@ public class CharacterEncodingFilter extends OncePerRequestFilter { private boolean forceEncoding = false; + /** + * Create a default {@code CharacterEncodingFilter}, + * with the encoding to be set via {@link #setEncoding}. + * @see #setEncoding + */ + public CharacterEncodingFilter() { + } + + /** + * Create a {@code CharacterEncodingFilter} for the given encoding. + * @param encoding the encoding to apply + * @since 4.2.3 + * @see #setEncoding + */ + public CharacterEncodingFilter(String encoding) { + this(encoding, false); + } + + /** + * Create a {@code CharacterEncodingFilter} for the given encoding. + * @param encoding the encoding to apply + * @param forceEncoding whether the specified encoding is supposed to + * override existing request and response encodings + * @since 4.2.3 + * @see #setEncoding + * @see #setForceEncoding + */ + public CharacterEncodingFilter(String encoding, boolean forceEncoding) { + Assert.hasLength(encoding, "Encoding must not be empty"); + this.encoding = encoding; + this.forceEncoding = forceEncoding; + } + + /** * Set the encoding to use for requests. This encoding will be passed into a * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call. diff --git a/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java index 928bdd75135..64392f91f08 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java @@ -32,6 +32,7 @@ import static org.mockito.BDDMockito.*; /** * @author Rick Evans * @author Juergen Hoeller + * @author Vedran Pavic */ public class CharacterEncodingFilterTests { @@ -50,9 +51,7 @@ public class CharacterEncodingFilterTests { HttpServletResponse response = mock(HttpServletResponse.class); FilterChain filterChain = mock(FilterChain.class); - CharacterEncodingFilter filter = new CharacterEncodingFilter(); - filter.setForceEncoding(true); - filter.setEncoding(ENCODING); + CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING, true); filter.init(new MockFilterConfig(FILTER_NAME)); filter.doFilter(request, response, filterChain); @@ -73,9 +72,7 @@ public class CharacterEncodingFilterTests { FilterChain filterChain = mock(FilterChain.class); - CharacterEncodingFilter filter = new CharacterEncodingFilter(); - filter.setForceEncoding(false); - filter.setEncoding(ENCODING); + CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING); filter.init(new MockFilterConfig(FILTER_NAME)); filter.doFilter(request, response, filterChain); @@ -86,7 +83,7 @@ public class CharacterEncodingFilterTests { } @Test - public void doesNowtIfEncodingIsNotEmptyAndNotForced() throws Exception { + public void doesNotIfEncodingIsNotEmptyAndNotForced() throws Exception { HttpServletRequest request = mock(HttpServletRequest.class); given(request.getCharacterEncoding()).willReturn(ENCODING); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); @@ -96,8 +93,7 @@ public class CharacterEncodingFilterTests { FilterChain filterChain = mock(FilterChain.class); - CharacterEncodingFilter filter = new CharacterEncodingFilter(); - filter.setEncoding(ENCODING); + CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING); filter.init(new MockFilterConfig(FILTER_NAME)); filter.doFilter(request, response, filterChain); @@ -140,8 +136,7 @@ public class CharacterEncodingFilterTests { FilterChain filterChain = mock(FilterChain.class); - CharacterEncodingFilter filter = new CharacterEncodingFilter(); - filter.setEncoding(ENCODING); + CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING); filter.doFilter(request, response, filterChain); verify(request).setCharacterEncoding(ENCODING);