Jersey Rest Client是否比HttpClient更适合调用一个宁静的服务?

时间:2013-03-05 01:27:21

标签: json rest java-ee jersey gson

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

2 个答案:

答案 0 :(得分: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客户端库的强大功能。

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

答案 1 :(得分:0)

它不是哪一个更好,它们各有利弊,就像需要做任何HTTP动作的代码行数一样,Jersey客户端实际上非常简单。但主要是HttpClient让你可以控制你的行为,只是为了解释你;如果有针对Http POST Multipart功能的Jersey客户端代码,如果调用多个线程来命中此服务,则Jersey客户端会间歇性地使用Socket关闭异常,而HttpClient执行完美无瑕,因为HttpCLient内部会重试,而在泽西岛客户不会这样做。