Java Http請求傳json數(shù)據(jù)亂碼問題的解決
業(yè)務(wù)場景:調(diào)easyui的dialog打開一個彈窗,傳參是用json封裝的,而且有中文,然后在極速模式是正常的,在ie11測試發(fā)現(xiàn)中文出現(xiàn)亂碼了
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數(shù)據(jù),并轉(zhuǎn)成list,然后在ie模式,獲取到的json數(shù)據(jù)都出現(xiàn)中文亂碼,然后導(dǎo)致json不能解析報錯了
String params = request.getParameter("params"); logger.info("文書參數(shù)轉(zhuǎn)換前:》》"+params); params=StringEscapeUtils.unescapeJava(params); logger.info("文書參數(shù)轉(zhuǎn)換后:》》"+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(); }
針對上面問題,和同事討論,最開始打算base64加密來傳,然后發(fā)現(xiàn)base64加密中文出現(xiàn)問題,所以改成URLEncode的方式,前端加密兩遍,后臺在解密一遍
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();
后臺代碼修改,解碼一遍,然后發(fā)現(xiàn)在ie也正常
String params = request.getParameter("params"); logger.info("文書參數(shù)轉(zhuǎn)換前:》》"+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("文書參數(shù)轉(zhuǎn)換后:》》"+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(); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程編程基石ThreadPoolExecutor示例詳解
這篇文章主要為大家介紹了Java多線程編程基石ThreadPoolExecutor示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Spring Boot Hello World的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Boot Hello World的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-10-10