如何将JSON转换为JSONP?

5

我编写了以下代码,用于向前端发送JSON数据。但由于跨域安全问题,我们需要将其转换为JSONP。有人可以建议我需要修改什么来进行此转换吗?

服务器端代码

JsonFactory jfactory = new JsonFactory();
         ObjectMapper mapper = new ObjectMapper();
         try {
                StringWriter stringWriter = new StringWriter();
                JsonGenerator jGenerator = jfactory.createJsonGenerator(stringWriter);
                jGenerator.useDefaultPrettyPrinter();
                jGenerator.writeStartObject(); // {
                jGenerator.writeStringField("title", title); // "title" : title
                jGenerator.writeStringField("Description", desc); // "desc" :
                jGenerator.writeFieldName("images");
                jGenerator.writeStartArray(); // [
                if(imageArray.size() != 0){
                for (String img : imageArray) {
                    jGenerator.writeString(img); // "msg 1"
                }
                }
                jGenerator.writeEndArray(); // ]
                jGenerator.writeEndObject(); // }
                jGenerator.close();
                response.getWriter().write(stringWriter.toString());
                System.out.println(stringWriter.toString());
                response.getWriter().close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("JasonGen servlet called end");

前端Javascript:

$.getJSON("http://localhost:8080/JsoupPrj/JasonGen?url="+ url[0],function(data){
                var imageArray=[];
                var imageOne = null;
                    imageArray=data.images;
....................
}

你知道JSON和JSONP之间的区别吗? - Waleed Khan
另一篇有很好解释的帖子:https://dev59.com/HW435IYBdhLWcg3wigyx - user1721033
1个回答

5

既然您正在使用jQuery并且控制服务器端,那么请更改您的服务器代码,以便查找callback参数。该参数的值将是客户端代码期望的回调函数的名称。然后,不要返回裸JSON,而是以callbackName(rawJson)的形式返回。

例如,假设使用servlet API:

String callbackName = request.getParameter("callback");

// ... your JSON code 

if (callbackName != null)
{
    // JSONP wrapping:
    response.getWriter().write(callbackName +
                               "(" + stringWriter.toString() + ")");
    System.out.println(callbackName + "(" + stringWriter.toString() + ")");
}
else
{
    response.getWriter().write(stringWriter.toString());
    System.out.println(stringWriter.toString());
}

response.getWriter().close();

然后在客户端,继续使用jQuery.getJSON,但将一个?callback=?查询参数附加到您的URL上,或者改用jQuery.ajax进行调用,并使用dataType: jsonp设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接