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