SpringMVC返回jsonp的问题

项目采用springMVC作为控制层,有一个请求用来返回jsonp的数据。代码大致内容如下:

@RequestMapping(value = LoginUrlUtil.LOGINJSON)
@ResponseBody
public Object loginjsonp (String my_username, String my_password, String callbackJsonp, HttpServletResponse response, HttpServletRequest request) {
           
      JSONObject jsonObject = new JSONObject();
      makeResult(jsonObject);
      return callbackJsonp + "(" + jsonObject.toJSONString() + ")";
}
可是在页面进行ajax的jsonp调用时,却不进入success方法,打印错误信息,发现有异常: XXX was not called。也就是说返回的数据的格式是有问题的。

但是换为PrintWriter向页面输出却没有问题,代码如下:

@RequestMapping(value = LoginUrlUtil.LOGINJSON)
@ResponseBody
public Object loginjsonp (String my_username, String my_password, String callbackJsonp, HttpServletResponse response, HttpServletRequest request) {
           
      JSONObject jsonObject = new JSONObject();
      makeResult(jsonObject);
           
      response.getWriter().write(callbackJsonp + "(" + jsonObject.toJSONString() + ")");
      return null;
}
在浏览器中直接访问该请求,发现采用return的返回结果,页面输出的是以下形式的:

"callbackJsonp({\"jumpTo\":\"http://www.XXXX.com/\",\"result\":\"success\",\"userId\":1,\"memberId\":2})"

而采用PrintWriter页面输出形式如下:

callbackJsonp({"jumpTo":"http://www.XXXX.com/","result":"success","userId":1,"memberId":2})

而这两种情况的不同出现的原因和为什么第一种页面出现异常的原因我不得而知。但是既然用了springMVC,还是喜欢采用ResponseBody注解,返回对象这种看起来优雅的形式。于是继续寻找解决方法,后来发现,采用com.fasterxml.jackson.databind.util.JSONPObject可以实现,代码如下:

@RequestMapping(value = LoginUrlUtil.LOGINJSON)
@ResponseBody
public Object loginjsonp (String my_username, String my_password, String callbackJsonp, HttpServletResponse response, HttpServletRequest request) {
           
      JSONObject jsonObject = new JSONObject();
      makeResult(jsonObject);
           
      JSONPObject jpo = new JSONPObject(callbackJsonp, jsonObject);
      return jpo;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值