我正在尝试使用JSOPRequestBuilder从GWT调用Restful WS。我有一个类似的问题,在链接中报告
但是,我无法弄清楚解决方案。请尽早帮助我。
@GET
@Produces(MediaType.APPLICATION_JSON)
public DealerAddress getDealerAddress(@QueryParam("dealerId") String sDealerId) {
DealerAddress dlrAd = new DealerAddress("test", "test", "test", "test", 10, new Date(), new Date());
return dlrAd;
}
Jersey返回DealerAddress的JSON对象。
现在休息网址“https://127.0.0.1:8181/application/rest/OrderManagementResource?alt=json-in-script&dealerId=DLR1” 当我在浏览器中尝试请求时,工作绝对正常。
它甚至可以与GWT的RequestBuilder方法一起使用,但不能与JSONPRequestBuilder方法一起使用。
JsonpRequestBuilder jsonPReqBuilder = new JsonpRequestBuilder();
jsonPReqBuilder.setTimeout(100000);
jsonPReqBuilder.setCallbackParam("callback");
jsonPReqBuilder.requestObject("https://127.0.0.1:8181/application/rest/OrderManagementResource?alt=json-in-script&dealerId=DLR1" , new AsyncCallback<DealerAddressJSON>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
caught.printStackTrace();
Window.alert("Inside error"+caught.getLocalizedMessage());
}
@Override
public void onSuccess(DealerAddressJSON result) {
// TODO Auto-generated method stub
Window.alert("Inside success"+result);
}
});
其中DealerAddressJSON是JavaScriptObject类型类。
我可以看到我的JAX Rest资源被调用并说从服务器返回。
另外,我可以在Firebug中看到响应来自浏览器但是失败并出现异常“Unknown token:” 最后,我总是得到一个超时异常。 现在我很怀疑从JAX-RS资源返回JSON的方式是否是服务器中的问题 要么 JSONPRequestBuilder调用程序有问题吗?我无法理解一些链接在此问题上解释的回调更改。
请帮帮我。
答案 0 :(得分:2)
您可能正在发回JSON,而JSONPRequestBuilder需要JSONP。这些不是一回事。
JSON就是这样的数据 - 使用AJAX(即RequestBuilder)发出请求,并且可以直接读取内容。这些请求只能发送到同一台服务器。示例JSON数据:
{"response":"success", "items":[{"id":1}, {"id":2}]}
相比之下,JSONP是为跨源请求而设计的,因此数据不是仅包含数据,而是包含在JavaScript中。由于您的JSON服务未在js函数调用中包装响应,因此无效。示例JSONP数据:
callback_1({"response":"success", "items":[{"id":1}, {"id":2}]})
回调随每个请求而变化,因此服务器应该根据客户端每次请求的内容来更改该回调函数。