0

我正在使用外部RESTful服务的Google App Engine中创建网络应用程序。经过一番研究,我选择只使用java.net.URL类,而不是任何 JAX-RS API,例如Jersey,因为这些 API 与 GAE 存在一些兼容性问题,或者它们仅与某些版本兼容,所以关于...而且我不太喜欢这个问题。

按照本教程,调用我所做的 REST 服务:

URL url = new URL("rest-service-url");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//process the response...

然后我使用Google 的 GSON处理 JSON 响应,它也与 GAE 完全兼容。

首先,您认为这是一个不错的选择吗?

然后,我想以某种方式集中这些代码,因为我的应用程序中有许多不同的服务调用,那么我该怎么做呢?我想用这样的方法创建一些类:

public BufferedReader sendRESTRequest (URL url)
    //previous code here...        
}

但我不确定......这个方法应该是静态的吗?同步?我应该在方法内还是在类中创建一个 HttpURLConnection 对象?ETC...

谢谢!

4

1 回答 1

0

如果您被允许在您的项目中使用 Apache 库,请查看此处。为什么要重新发明轮子

有点意思

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
private String poolTimeOutMillSecStr = System.getProperty("CONN_TIME_OUT_MILLSEC", "60000");

    private String maxTotalConnStr = System.getProperty("MAX_TOTAL_CONN", "400");

    private String maxConnPerRouteStr = System.getProperty("MAX_CONN_PER_ROUTE", "200");

    HttpUtility httpUtilty;

    private String baseUrl = System.getProperty("BASE_URL", "http://localhost:8888");

    private String userName;

    private String password;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        int poolTimeOutMillSec = Integer.parseInt(poolTimeOutMillSecStr);
        int maxTotalConn = Integer.parseInt(maxTotalConnStr);
        int maxConnPerRoute = Integer.parseInt(maxConnPerRouteStr);
        httpUtilty = new HttpUtility(poolTimeOutMillSec, maxTotalConn, maxConnPerRoute);
        httpUtilty.initialize(baseUrl);
        userName = "admin";
        password = "admin";

    }
}

并像使用它一样

HttpResponse response = httpUtilty.postRequest(path, null, ins, null);
HttpEntity resEntity = response.getEntity();
于 2013-03-10T21:58:34.740 回答