業務場景:調easyui的dialog打開一個彈窗,傳參是用json封裝的,並且有中文,而後在極速模式是正常的,在ie11測試發現中文出現亂碼了html
var params = JSON.stringify(writParamList); top.dialog({ id: 'noticeList', title:'列表', width:900, height:500, url:'${root}/notice/multiNoticeList.do?params='+params, onclose:function(){ //location.reload(); } }).showModal();
後臺獲取json數據,並轉成list,而後在ie模式,獲取到的json數據都出現中文亂碼,而後致使json不能解析報錯了前端
String params = request.getParameter("params"); logger.info("文書參數轉換前:》》"+params); params=StringEscapeUtils.unescapeJava(params); logger.info("文書參數轉換後:》》"+params); ObjectMapper mapper = new ObjectMapper(); JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, FormModel.class); /*List<FormModel> writUnionFormList = JSON.parseArray(params, FormModel.class);*/ List<FormModel> writUnionFormList=new ArrayList<FormModel>(); try { writUnionFormList = (List<FormModel>)mapper.readValue(params, javaType); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
針對上面問題,和同事討論,最開始打算base64加密來傳,而後發現base64加密中文出現問題,因此改爲URLEncode的方式,前端加密兩遍,後臺在解密一遍java
var params = JSON.stringify(writParamList); top.dialog({ id: 'noticeList', title:'列表', width:900, height:500, url:'${root}/notice/multiNoticeList.do?params='+encodeURI(encodeURI(params)), onclose:function(){ //location.reload(); } }).showModal();
後臺代碼修改,解碼一遍,而後發如今ie也正常json
String params = request.getParameter("params"); logger.info("文書參數轉換前:》》"+params); //params=StringEscapeUtils.unescapeJava(params); // byte[] buffer=Base64Utils.decodeFromString(params); // params = new String(buffer); try { params=URLDecoder.decode(params,"utf-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } logger.info("文書參數轉換後:》》"+params); ObjectMapper mapper = new ObjectMapper(); JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, ApprWritUnionFormModel.class); /*List<FormModel> writUnionFormList = JSON.parseArray(params, FormModel.class);*/ List<FormModel> writUnionFormList=new ArrayList<FormModel>(); try { writUnionFormList = (List<FormModel>)mapper.readValue(params, javaType); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
原文出處:https://www.cnblogs.com/mzq123/p/11433013.htmlapp