@@ -72,6 +72,8 @@ public final class StringDecoder extends AbstractDataBufferDecoder<String> {
72
72
73
73
private final boolean stripDelimiter ;
74
74
75
+ private Charset defaultCharset = DEFAULT_CHARSET ;
76
+
75
77
private final ConcurrentMap <Charset , byte [][]> delimitersCache = new ConcurrentHashMap <>();
76
78
77
79
@@ -83,6 +85,24 @@ private StringDecoder(List<String> delimiters, boolean stripDelimiter, MimeType.
83
85
}
84
86
85
87
88
+ /**
89
+ * Set the default character set to fall back on if the MimeType does not specify any.
90
+ * <p>By default this is {@code UTF-8}.
91
+ * @param defaultCharset the charset to fall back on
92
+ * @since 5.2.9
93
+ */
94
+ public void setDefaultCharset (Charset defaultCharset ) {
95
+ this .defaultCharset = defaultCharset ;
96
+ }
97
+
98
+ /**
99
+ * Return the configured {@link #setDefaultCharset(Charset) defaultCharset}.
100
+ * @since 5.2.9
101
+ */
102
+ public Charset getDefaultCharset () {
103
+ return this .defaultCharset ;
104
+ }
105
+
86
106
@ Override
87
107
public boolean canDecode (ResolvableType elementType , @ Nullable MimeType mimeType ) {
88
108
return (elementType .resolve () == String .class && super .canDecode (elementType , mimeType ));
@@ -136,12 +156,12 @@ public String decode(DataBuffer dataBuffer, ResolvableType elementType,
136
156
return value ;
137
157
}
138
158
139
- private static Charset getCharset (@ Nullable MimeType mimeType ) {
159
+ private Charset getCharset (@ Nullable MimeType mimeType ) {
140
160
if (mimeType != null && mimeType .getCharset () != null ) {
141
161
return mimeType .getCharset ();
142
162
}
143
163
else {
144
- return DEFAULT_CHARSET ;
164
+ return getDefaultCharset () ;
145
165
}
146
166
}
147
167
0 commit comments