3

我需要调用一个返回 json 响应的 resful api。我正在考虑使用 jersey 客户端 api,但不确定它是否比直接使用 HttpClient 然后使用 GSON 将响应转换为 Java 对象更好。

4

2 回答 2

11

从编码效率的角度来看, Jersey 客户端远远优于 HttpClient。考虑:

// Jersey client
WebResource resource = Client.create().resource("http://foo.com")
resource.path("widgets").entity(someWidget).type(APPLICATION_JSON).post();
Wodget wodget = resource.path("widgets/wodget").accept(APPLICATION_XML).get(Wodget.class);

相对于:

// HttpClient
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://foo.com/widgets");
HttpEntity someWidgetEntity = ... // something with GSON to marshal the 'someWidget'
httpPost.setEntity(someWidgetEntity);
HttpResponse response = httpclient.execute(httpPost);

HttpGet httpGet = new HttpGet("http://foo.com/widgets/wodget");
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null) {
    ... // something with GSON to read in the wodget
}

再加上 Jersey 客户端可以在后台使用 HttpClient 进行 HTTP 交互这一事实,您将获得两全其美:简化的界面以及广泛使用的多功能 HTTP 客户端库的强大功能。

注意:上面的代码完全未经测试,但形状大致准确。

于 2013-03-05T01:28:46.390 回答
0

它不像哪个更好,它们有自己的优点和缺点,就像泽西客户端实际上在需要执行的代码行数方面非常简单,比如说任何 HTTP 操作。但主要是 HttpClient 让你对你的行为有很多控制,只是为了解释你;如果有用于 Http POST Multipart 功能的 Jersey 客户端代码,如果调用多个线程来访问此服务,则 Jersey 客户端会因 Socket 关闭异常而间歇性失败,而 HttpClient 执行完美,这是因为 HttpCLient 在内部会重试,而在 Jersey 客户端中则不会这样做。

于 2017-07-23T14:28:02.050 回答