【问题标题】:Restlet GWT Client and Requests Cross DomainRestlet GWT 客户端和跨域请求
【发布时间】:2013-04-12 22:41:47
【问题描述】:

GWT版本的Restlet Client是否可以进行跨域请求?

我需要使用 JSON 数据从外部 API 消耗 Rest 资源(GET、POST、PUT、DELETE)。

我知道 GWT 的同源策略 (SOP),但可能存在针对此限制的解决方法...

包含 GWT 示例的 Restlet 文档不再可用。这个链接例如:

http://wiki.restlet.org/docs_2.1/13-restlet/27-restlet/46-restlet/112-restlet.html

http://wiki.restlet.org/docs_2.1/13-restlet/275-restlet/144-restlet/189-restlet.html

【问题讨论】:

    标签: rest gwt restlet restlet-2.0


    【解决方案1】:

    如果您需要调用另一个域上的服务,请使用标准 GWT RequestBuilder

    例如参考:GWT RequestBuilder - Cross Site Requests

    您仍然想使用RestyGwt。这是Example

    看看JsonpRequestBuilder

    【讨论】:

    • RequestBuilder 的问题是让所有 json 解析器手动使用本机方法(JS 覆盖类型)很尴尬。我正在寻找一个像 Restlet 这样的简单框架,因为在服务器端我们已经使用了 Restlet。使用 RestyGwt,我对跨域请求并不走运。
    • @user2299380 看看 JsonpRequestBuilder。
    • 和RequestBuilder一样。我必须手动实现具有 JS 覆盖类型的模型对象。
    • 您不必手动将 json 覆盖类型映射到 java,使用 GWT autobeans,或者 gquery 数据绑定非常简单。
    • 我不知道GWT Autobeans,我去看看。谢谢@Manolo。
    【解决方案2】:

    我从未使用过Restlet,但它似乎在GWT RequestBuilder 中中继。因此,由于RequestBuilder 支持 CORS,gwt-restlet 应该可以。

    您可以毫无问题地将任何 GWT ajax 技术(RPC、RF 或 RequestBuilder)与 CORS 一起使用。认为 GWT 与任何其他 html/javascript 应用程序具有相同的限制,如果浏览器与 CORS 兼容(IE9 不兼容)并且服务器配置正确,CORS 将起作用。

    话虽如此,我鼓励您尝试gwtquery,它为您提供了一种处理ajax 的简单方法。通常,我使用gwtquery ajax 来消费3party 服务,因为它的语法和简单性。

    gQuery 语法的目标是您可以轻松获取几乎 jQuery 示例并将它们移植到其中。

    这是一个简单的例子:

     ajax(Ajax.createSettings()
       .setUrl("miservice.php")
       .setDataType("json") // txt, json, jsonp, xml
       .setType("get")     // post, get
       .setData($$("param1: 1, param2: 2")) // parameters in json, $$() creates json from string
       .setSuccess(new Function(){ // callback to be run if the request succeeds 
         public void f() {
           // The response when dataType=json is a javascript object (Properties)
           Properties json = getDataProperties();
         }
       })
     );
    

    对于 JSON(或 XML),我使用 gQuery databinding 将响应映射到 java 对象。

    例如:

    interface Site extends JsonBuilder {
      long getId();
      String getUrl();
      Site setId(long id);
      Site setUrl(String url);
    }
    
    ...
    Site site = GWT.create(Site.class);
    site.load(getDataProperties();
    Window.alert(site.getUrl();
    ...
    

    【讨论】:

    • 感谢您的回复,但我正在寻找一种使用 Json 消耗 Rest 资源的简单方法。似乎显示了 GWT 的 Restlet 客户端,但是官方网站上不再提供文档。
    • 是的,我看到 gwt 文档不再可用。我查看了他们的 github 存储库,那里没有示例。似乎他们对gwt不太关注。无论如何,我只是提出了一个与restlet 一样简单的选项(虽然IMO 更简单)。祝你好运。
    猜你喜欢
    • 2011-10-21
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多