json字符串出现转义符,导致调用者使用ObjectMapper解析成Map报错
2017-02-27 17:16
627 查看
json1串:
{"orderCount":0,"signType":"SHA256WithRSA","sign":"85022E420F6F0429A2A1F8774C66C04BFF6085CEE37C6DC085F366733081689C16639B03B34455B7BAA2659E82FF8FD8A031643DA7D9A24B2F2898404758C0BD64F889E1B0C58BE0ADBFF59C292BCA4B55DC2CDA052A8AB964D99F1F2497386AA482A458F49442BD119DEBB7C2C90ACD8E2906C16290A810FAE8357D2D6175F10111D8DDBD108443F6D515AABD9B4879AF0D18B08257698E0FA2899CE012EEF1A6DFEEC25C6FFCEABD019AA70CE5CE13C388811FB55392D576B9EA55D3F45A426064262CA953D67A8E15B79E9DF42066D48B60FB0950EB6415FFC546C1D11EE2DF8A28907F8C65FA3B4D42514103C3CDC72594295E7874B6B3C72487333DCF9B","returnCode":"1","returnDesc":"系统执行错误"}
json2串:
"{\"orderCount\":0,\"signType\":\"SHA256WithRSA\",
\"sign\":\"85022E420F6F0429A2A1F8774C66C04BFF6085CEE37C6DC085F366733081689C16639B03B34455B7BAA2659E82FF8FD8A031643DA7D9A24B2F2898404758C0BD64F889E1B0C58BE0ADBFF59C292BCA4B55DC2CDA052A8AB964D99F1F2497386AA482A458F49442BD119DEBB7C2C90ACD8E2906C16290A810FAE8357D2D6175F10111D8DDBD108443F6D515AABD9B4879AF0D18B08257698E0FA2899CE012EEF1A6DFEEC25C6FFCEABD019AA70CE5CE13C388811FB55392D576B9EA55D3F45A426064262CA953D67A8E15B79E9DF42066D48B60FB0950EB6415FFC546C1D11EE2DF8A28907F8C65FA3B4D42514103C3CDC72594295E7874B6B3C72487333DCF9B\",\"returnCode\":\"1\",\"returnDesc\":\"系统执行错误\"}"
报错内容:
Can not instantiate value of type [map type; class java.util.LinkedHashMap, [simple type, class java.lang.Object] -> [simple type, class java.lang.Object]] from JSON String; no single-String constructor/factory method
原因:
使用中涉及如下两个方法:
首先我将上述json1字符串传入sendResponse方法,其内部会对json1字符串再做一下json转换,此时得到json2串,即带有转译字符。
调用者获取json2串使用ObjectMapper转换成Map便会报上述错误。
解决方法:
直接调用sendText方法发出响应。
{"orderCount":0,"signType":"SHA256WithRSA","sign":"85022E420F6F0429A2A1F8774C66C04BFF6085CEE37C6DC085F366733081689C16639B03B34455B7BAA2659E82FF8FD8A031643DA7D9A24B2F2898404758C0BD64F889E1B0C58BE0ADBFF59C292BCA4B55DC2CDA052A8AB964D99F1F2497386AA482A458F49442BD119DEBB7C2C90ACD8E2906C16290A810FAE8357D2D6175F10111D8DDBD108443F6D515AABD9B4879AF0D18B08257698E0FA2899CE012EEF1A6DFEEC25C6FFCEABD019AA70CE5CE13C388811FB55392D576B9EA55D3F45A426064262CA953D67A8E15B79E9DF42066D48B60FB0950EB6415FFC546C1D11EE2DF8A28907F8C65FA3B4D42514103C3CDC72594295E7874B6B3C72487333DCF9B","returnCode":"1","returnDesc":"系统执行错误"}
json2串:
"{\"orderCount\":0,\"signType\":\"SHA256WithRSA\",
\"sign\":\"85022E420F6F0429A2A1F8774C66C04BFF6085CEE37C6DC085F366733081689C16639B03B34455B7BAA2659E82FF8FD8A031643DA7D9A24B2F2898404758C0BD64F889E1B0C58BE0ADBFF59C292BCA4B55DC2CDA052A8AB964D99F1F2497386AA482A458F49442BD119DEBB7C2C90ACD8E2906C16290A810FAE8357D2D6175F10111D8DDBD108443F6D515AABD9B4879AF0D18B08257698E0FA2899CE012EEF1A6DFEEC25C6FFCEABD019AA70CE5CE13C388811FB55392D576B9EA55D3F45A426064262CA953D67A8E15B79E9DF42066D48B60FB0950EB6415FFC546C1D11EE2DF8A28907F8C65FA3B4D42514103C3CDC72594295E7874B6B3C72487333DCF9B\",\"returnCode\":\"1\",\"returnDesc\":\"系统执行错误\"}"
报错内容:
Can not instantiate value of type [map type; class java.util.LinkedHashMap, [simple type, class java.lang.Object] -> [simple type, class java.lang.Object]] from JSON String; no single-String constructor/factory method
原因:
使用中涉及如下两个方法:
public void sendText(HttpServletResponse response, String str) throws IOException { // 必须写上这句,中文编码问题 response.setContentType("text/plain;charset=UTF-8"); //response.setContentType("application/json;charset=utf-8"); response.getWriter().write(str); response.getWriter().flush(); response.getWriter().close(); }
public void sendResponse(HttpServletResponse response, Object object) throws IOException { logger.debug("响应的对象:{}", object); Gson gson = new Gson(); String respJson = gson.toJson(object); logger.debug("响应的数据:{}", respJson); logger.debug("响应的状态:{}", response); sendText(response, respJson); }
首先我将上述json1字符串传入sendResponse方法,其内部会对json1字符串再做一下json转换,此时得到json2串,即带有转译字符。
调用者获取json2串使用ObjectMapper转换成Map便会报上述错误。
解决方法:
直接调用sendText方法发出响应。
相关文章推荐
- Android进步之十四:使用jackon的ObjectMapper的writeValueAsString方法可以把java对象转化成json字符串
- ajax+php中出现需要使用eval函数将json中字符串解析成json格式
- java后台服务器向手机端返回Json, 使用 "net.sf.json.JSONObject" 解析出现的异常问题
- Java基础系列16:使用JSONObject和JSONArray解析和构造json字符串
- SoapObject解析,将SoapObject转成json字符串
- Json - 使用json-lib解析json字符串(火车票务返回的json串)的例子
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- 关于使用JSONObject出现的一个小问题
- 使用库org.json 和 Gson 解析 JSON格式字符串
- 使用Java JSONObject操作JSON字符串对象
- 使用eval()解析JSON格式字符串应注意的问题
- 关于SAXReader解析XML以及JSONObject和JSONArray的使用总结
- 使用eval()解析Json字符串
- Android的数据处理:使用annotation实现JSON字符串解析为java对象
- Objective-C-使用NSMutableURLRequest发送POST请求,使用NSJSONSerialization解析JSON字符串
- Android使用自带JSONObject解析JSON数据
- java如何解析json字符串(List<Map<String,Object>成功的类型)
- 适用于Firemonkey的Json解析对象XsuperObject使用方法介绍
- 使用Json-lib转换json字符串出现There is a cycle in the hierarchy!时的解决方案