Skip to content

Commit 64a8dfb

Browse files
committed
CharacterEncodingFilter provides convenience constructors for Servlet 3.0 style usage
Issue: SPR-13572
1 parent 11d1f05 commit 64a8dfb

File tree

2 files changed

+42
-11
lines changed

2 files changed

+42
-11
lines changed

spring-web/src/main/java/org/springframework/web/filter/CharacterEncodingFilter.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import javax.servlet.http.HttpServletRequest;
2323
import javax.servlet.http.HttpServletResponse;
2424

25+
import org.springframework.util.Assert;
26+
2527
/**
2628
* Servlet Filter that allows one to specify a character encoding for requests.
2729
* This is useful because current browsers typically do not set a character
@@ -47,6 +49,40 @@ public class CharacterEncodingFilter extends OncePerRequestFilter {
4749
private boolean forceEncoding = false;
4850

4951

52+
/**
53+
* Create a default {@code CharacterEncodingFilter},
54+
* with the encoding to be set via {@link #setEncoding}.
55+
* @see #setEncoding
56+
*/
57+
public CharacterEncodingFilter() {
58+
}
59+
60+
/**
61+
* Create a {@code CharacterEncodingFilter} for the given encoding.
62+
* @param encoding the encoding to apply
63+
* @since 4.2.3
64+
* @see #setEncoding
65+
*/
66+
public CharacterEncodingFilter(String encoding) {
67+
this(encoding, false);
68+
}
69+
70+
/**
71+
* Create a {@code CharacterEncodingFilter} for the given encoding.
72+
* @param encoding the encoding to apply
73+
* @param forceEncoding whether the specified encoding is supposed to
74+
* override existing request and response encodings
75+
* @since 4.2.3
76+
* @see #setEncoding
77+
* @see #setForceEncoding
78+
*/
79+
public CharacterEncodingFilter(String encoding, boolean forceEncoding) {
80+
Assert.hasLength(encoding, "Encoding must not be empty");
81+
this.encoding = encoding;
82+
this.forceEncoding = forceEncoding;
83+
}
84+
85+
5086
/**
5187
* Set the encoding to use for requests. This encoding will be passed into a
5288
* {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call.

spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
/**
3333
* @author Rick Evans
3434
* @author Juergen Hoeller
35+
* @author Vedran Pavic
3536
*/
3637
public class CharacterEncodingFilterTests {
3738

@@ -50,9 +51,7 @@ public void forceEncodingAlwaysSetsEncoding() throws Exception {
5051
HttpServletResponse response = mock(HttpServletResponse.class);
5152
FilterChain filterChain = mock(FilterChain.class);
5253

53-
CharacterEncodingFilter filter = new CharacterEncodingFilter();
54-
filter.setForceEncoding(true);
55-
filter.setEncoding(ENCODING);
54+
CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING, true);
5655
filter.init(new MockFilterConfig(FILTER_NAME));
5756
filter.doFilter(request, response, filterChain);
5857

@@ -73,9 +72,7 @@ public void encodingIfEmptyAndNotForced() throws Exception {
7372

7473
FilterChain filterChain = mock(FilterChain.class);
7574

76-
CharacterEncodingFilter filter = new CharacterEncodingFilter();
77-
filter.setForceEncoding(false);
78-
filter.setEncoding(ENCODING);
75+
CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING);
7976
filter.init(new MockFilterConfig(FILTER_NAME));
8077
filter.doFilter(request, response, filterChain);
8178

@@ -86,7 +83,7 @@ public void encodingIfEmptyAndNotForced() throws Exception {
8683
}
8784

8885
@Test
89-
public void doesNowtIfEncodingIsNotEmptyAndNotForced() throws Exception {
86+
public void doesNotIfEncodingIsNotEmptyAndNotForced() throws Exception {
9087
HttpServletRequest request = mock(HttpServletRequest.class);
9188
given(request.getCharacterEncoding()).willReturn(ENCODING);
9289
given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null);
@@ -96,8 +93,7 @@ public void doesNowtIfEncodingIsNotEmptyAndNotForced() throws Exception {
9693

9794
FilterChain filterChain = mock(FilterChain.class);
9895

99-
CharacterEncodingFilter filter = new CharacterEncodingFilter();
100-
filter.setEncoding(ENCODING);
96+
CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING);
10197
filter.init(new MockFilterConfig(FILTER_NAME));
10298
filter.doFilter(request, response, filterChain);
10399

@@ -140,8 +136,7 @@ public void withIncompleteInitialization() throws Exception {
140136

141137
FilterChain filterChain = mock(FilterChain.class);
142138

143-
CharacterEncodingFilter filter = new CharacterEncodingFilter();
144-
filter.setEncoding(ENCODING);
139+
CharacterEncodingFilter filter = new CharacterEncodingFilter(ENCODING);
145140
filter.doFilter(request, response, filterChain);
146141

147142
verify(request).setCharacterEncoding(ENCODING);

0 commit comments

Comments
 (0)