0

假设有一个第 3 方 RESTful Web 服务在以下位置公开一个 GET 端点:

http://someservice.com/api/askAnyQuestion

我想打那个服务,把我的问题放在查询字符串上:

http://someservice.com/api/askAnyQuestion&q=Does%20my%20dog%20know%20about%20math%3F

如何从客户端 GWT 应用程序访问此服务?我一直在阅读RequestFactory教程,但 RF 似乎仅用于提供数据访问层 (DAL) 和 CRUDding 实体,我不完全确定它是否适合此用例。

如果有人可以提供代码示例,而不仅仅是指向我已经阅读过的 GWT 教程的链接,或者我也可能阅读过的一些 Google 员工的博客,则可以获得额外的超级奖励积分 ;-)。

4

2 回答 2

1

您可以使用RequestBuilder。成功地使用它与 REST 一起工作。

         RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
         try {
            builder.sendRequest(null, new RequestCallback() {
                @Override
                public void onError(Request request, Throwable exception) {
                    // process error
                }

                @Override
                public void onResponseReceived(Request request, Response response) {
                    if (200 == response.getStatusCode()) {
                        // process success
                    } else {
                        // process other HTTP response codes
                    }
                }
            });
        } catch (RequestException e) {
            // process exception
        }

另请查看此问题以获取跨站点请求相关信息。

于 2013-02-19T11:45:24.517 回答
0

几天前我遇到了同样的问题,并尝试使用 requestBuilder 来实现它。您将收到一个跨域脚本问题。

https://developers.google.com/web-toolkit/doc/1.6/FAQ_Server#How_can_I_dynamically_fetch_JSON_feeds_from_other_web_domains

我确实通过对我的服务器的 RPC 请求以及从那里对跨域 URL 的服务器端 HTTP 请求进行了处理。

https://developers.google.com/web-toolkit/doc/latest/tutorial/Xsite

public static void SendRequest(String method, String notifications) {
    String url = SERVICE_BASE_URL + method;

    JSONObject requestObject = new JSONObject();
    JSONArray notificationsArray =null;
    JSONObject mainRequest = new JSONObject();
    try {
        notificationsArray = new JSONArray(notifications);
        requestObject.put("notifications", notificationsArray);

        mainRequest.put("request", requestObject);
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    HttpURLConnection connection = null;
    try
    {
        URL server = new URL(url);
        connection = (HttpURLConnection) server.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setDoInput(true);
        connection.setDoOutput(true);

        DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
        writer.writeBytes(mainRequest.toString());
        writer.flush();
        writer.close();

        parseResponse(connection);
    }
    catch (Exception e)
    {
        System.out.println("An error occurred: " + e.getMessage());
    }
    finally
    {
        if (connection != null)
        {
            connection.disconnect();
        }
    }
}
于 2013-02-19T12:11:08.333 回答