我正在 Google App Engine 中创建使用外部 RESTful 服务的网络应用。 经过一些研究后,我选择仅使用 java.net.URL 类,而不是使用任何JAX-RS API,例如 Jersey ,因为这些API具有一定的兼容性GAE的问题,或者只与某些版本兼容等等......我不太喜欢这个问题。
在this tutorial之后,我要调用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's GSON处理JSON响应,它也与GAE完全兼容。
首先,您认为这是一个不错的选择吗?
然后,我想以某种方式集中这个代码,因为我的应用程序中有很多不同的服务调用,所以我怎么能这样做呢?我想用这样的方法创建一些类:
public BufferedReader sendRESTRequest (URL url)
//previous code here...
}
但我不确定......这种方法应该是静态的吗?同步?我应该在方法内还是在类中创建一个HttpURLConnection对象?等...
谢谢!
答案 0 :(得分:0)
如果允许您为项目使用Apache库,请查看here。为什么重新发明轮子
的内容
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();