Spring MVC jsonp跨域调用 中文乱码问题处理

一、问题描述

    

           最近项目中使用了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.这样就可以实现两种方式调用都正常。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值