2424import javax .servlet .AsyncContext ;
2525import javax .servlet .DispatcherType ;
2626import javax .servlet .ServletContext ;
27+ import javax .servlet .ServletException ;
2728import javax .servlet .http .Cookie ;
2829import javax .servlet .http .HttpServletRequest ;
2930import javax .servlet .http .HttpSession ;
@@ -288,9 +289,12 @@ protected Cookie[] parseCookieHeaderValue(String headerValue) {
288289 * Given a map of key/values query string parameters from API Gateway, creates a query string as it would have
289290 * been in the original url.
290291 * @param parameters A Map<String, String> of query string parameters
292+ * @param encode Whether the key and values should be URL encoded
293+ * @param encodeCharset Charset to use for encoding the query string
291294 * @return The generated query string for the URI
292295 */
293- protected String generateQueryString (EncodingQueryStringParameterMap parameters ) {
296+ protected String generateQueryString (Map <String , String > parameters , boolean encode , String encodeCharset )
297+ throws ServletException {
294298 if (parameters == null || parameters .size () == 0 ) {
295299 return null ;
296300 }
@@ -300,12 +304,31 @@ protected String generateQueryString(EncodingQueryStringParameterMap parameters)
300304
301305 StringBuilder queryStringBuilder = new StringBuilder ();
302306
303- parameters .keySet ().stream ().forEach (k -> parameters . get ( k ) .stream ().forEach (v -> {
307+ /* parameters.keySet().stream().forEach(k -> parameters.stream().forEach(v -> {
304308 queryStringBuilder.append("&");
305309 queryStringBuilder.append(k);
306310 queryStringBuilder.append("=");
307311 queryStringBuilder.append(v);
308- }));
312+ }));*/
313+ try {
314+ for (Map .Entry <String , String > e : parameters .entrySet ()) {
315+ queryStringBuilder .append ("&" );
316+ if (encode ) {
317+ queryStringBuilder .append (URLEncoder .encode (e .getKey (), encodeCharset ));
318+ } else {
319+ queryStringBuilder .append (e .getKey ());
320+ }
321+ queryStringBuilder .append ("=" );
322+ if (encode ) {
323+ queryStringBuilder .append (URLEncoder .encode (e .getValue (), encodeCharset ));
324+ } else {
325+ queryStringBuilder .append (e .getValue ());
326+ }
327+
328+ }
329+ } catch (UnsupportedEncodingException e ) {
330+ throw new ServletException ("Invalid charset passed for query string encoding" , e );
331+ }
309332
310333 queryString = queryStringBuilder .toString ();
311334 queryString = queryString .substring (1 ); // remove the first & - faster to do it here than adding logic in the Lambda
0 commit comments