Http請求傳json數據中文亂碼問題

業務場景:調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

相關文章
相關標籤/搜索