tomcat 8 responseリダイレクトバンドjsonパラメータの問題、Illegal character in query at...


質問説明:tomcat 8のresponseリダイレクト時にjson形式のパラメータ
String json="{\"a\":\"b\",\"c\":\"d\"}";
response.sendRedirect("rsserver/jsp/ServerMonitor.jsp?resultMap="+json);
が次のようにエラーを報告しました.
  : Failed to redirect to [rsserver/jsp/ServerMonitor.jsp?resultMap={"durationTime":"0 0  16 25 ","tcpServerURL":"192.163.20.79:9999","WSServerURL":"http://192.163.20.79:9899/RSServer","receiveTotal":"0","sendTotal":"0","receiveError":"0","switchStatus":"  ","sendFailed":"0"}]
java.lang.IllegalArgumentException: 
 index 41: rsserver/jsp/ServerMonitor.jsp?resultMap={"durationTime":"0 0  16 25 ","tcpServerURL":"192.163.20.79:9999","WSServerURL":"http://192.163.20.79:9899/RSServer","receiveTotal":"0","sendTotal":"0","receiveError":"0","switchStatus":"  ","sendFailed":"0"}
    at java.net.URI.create(Unknown Source)
......

ソリューション:その中の"{"、"}""""、"、":"をエスケープする必要があります.
String transferredResult =json.replaceAll("\\{","%7B")
                .replaceAll("\\}","%7D")
                .replaceAll("\"","%22")
                .replaceAll("\\:","%3A")
                .replaceAll("\\,","%2C");

response.sendRedirect("rsserver/jsp/ServerMonitor.jsp?resultMap="+transferredResult );