Spring MVC jsonp跨域调用 中文乱码问题处理
2016-06-27 16:52
507 查看
一、问题描述
最近项目中使用了Spring MVC开发了一个api接口服务器,接口调用要求需支持jsonp跨域形式调用。在自己开发和测试过程中未发现有中文乱码问题,因为是在浏览器中直接输入url方式进行调用,应答回来的都是正常的中文;但当前端调用接口使用时,就出现中文乱码问题了。
二、问题分析
经过查阅资料后,大致明白了问题所在,jsonp跨域接口的写法和json完全不一样,jsonp返回的是一个JSONPObject对象,而非json格式字符串。三、处理说明
1.由于需要兼容两种调用方式,所以决定统一应答json格式的字符串/** * 测试接口 * @param request * @return */ @RequestMapping(value = "/fault/test", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE + CHARSET) @ResponseBody private String testPort(HttpServletRequest request){ CommonRes res=new CommonRes(); String callback=null; try { //参数获取 callback=request.getParameter("callback"); //业务逻辑处理 } catch (Exception e) { logger.warn("接口处理异常", e); res.setAcktype(CommonRes.RC_EXECUTE_FAIL); } return jsonp(callback,res); }
2.jsonp兼容处理,如果有传callback参数,则先以callback和应答结果对象为参数创建JSONPObject对象,再转成json字符串;否则直接将应答结果对象装成json字符串。
/** * 回调应答 * @param callback * @param o * @return */ protected String jsonp(String callback,Object o){ String res; if(callback!=null && !"".equals(callback)){ res= jsonSerializerUtil.seriazileAsString(new JSONPObject(callback,o)); }else{ res= jsonSerializerUtil.seriazileAsString(o); } return res; }3.完成上面步骤后,可以实现两种调用方式兼容,但jsonp还是会乱码,需在@RequestMapping处添加produces = MediaType.APPLICATION_JSON_VALUE + CHARSET,CHARSET值为
protected final static String CHARSET = ";charset=UTF-8";
4.这样就可以实现两种方式调用都正常。
相关文章推荐
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- mysql命令提示行连接乱码的解决
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- vbs 解析json jsonp的方法
- Jquery乱码的一次解决过程 图解教程
- 解决realplayer11中文正式版网页右键乱码问题embed_cn.dll
- 计算机中的字符串编码、乱码、BOM等问题详解
- PHP附件下载中文名称乱码的解决方法
- PHP使用PDO操作数据库的乱码问题解决方法
- php+AJAX传送中文会导致乱码的问题的解决方法
- Discuz!nt 源文件变成乱码的解决方法
- 关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
- jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
- JavaScript中出现乱码的处理心得
- 浅析JSONP技术原理及实现
- JavaScript中模拟实现jsonp
- AJAX实现跨域的三种方法(代理,JSONP,XHR2)
- Node.js返回JSONP详解