java - 如何从 JSON 转换为 JSONP?

标签 java jquery json jsonp

我编写了以下代码以将 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;
....................
}

最佳答案

由于您使用的是 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,但在您的 URL 中附加一个 ?callback=? 查询参数,或者改用 jQuery.ajax 用于您的调用,并使用 dataType: jsonp 设置。

关于java - 如何从 JSON 转换为 JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12183552/

相关文章:

java - Java 中生成的 HmacSha256 签名与 Go 中不同

java - 服务器启动时监听器类未执行 || Tomcat || eclipse

java - 在运行的系统上换入和换出逻辑

jquery - 日期选择器 onSelect

javascript - 如何填充一个空的json对象

java - 如何在 Android 中解决此错误? java.net.MalformedURLException : Protocol not found:

javascript - 在 div 上时绑定(bind)到滚轮

jquery - 在鼠标悬停时停止选取框并在鼠标移出时播放

javascript - 如何将名称添加到未命名的 JSON 对象数组中?

json - CouchDB 获取所有数据库及其最后的更改