我需要调用一个能够返回json响应的resful api。我正在考虑使用jersey客户端api但不确定它是否比直接使用HttpClient然后使用GSON将响应转换为Java对象更好。
答案 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内部会重试,而在泽西岛客户不会这样做。