2011-07-27 47 views
11

我有一個春天的應用程序,需要調用一些數據基於REST的外部API調用。春季集成或Apache HTTP客戶端

來自API的數據格式是JSON。

我的問題是以下哪個選項之一是更好,重量輕,使外部API調用

  1. Spring集成(使用WS:出站網關)

  2. 的Apache Commons的HttpClient

請分享你的想法...

+0

請參閱http://stackoverflow.com/questions/221442/rest-clients-for-java –

回答

3

我已使用彈簧& Jersey。 Jersey通過使用註釋類似@GET & @POST & @PUT@DELETE與JAX-RS庫捆綁,可以輕鬆地構建RESTful Web服務。

+0

我的所有API請求都很簡單獲取帶有JSON數據的請求。我的初衷是使用Apache HTTP客戶端來進行API調用並使用jackson來解析JSON響應。我開始閱讀關於Spring集成,並想知道,如果任何一個是使用Spring的集成爲了這個目的...... – johnny

+0

您可以通過做與Jersy以下的JSON做簡單的GET請求: '字符串BASE_URI =「HTTP :// localhost:8080/HelloWorldWebapp/resources「;' 'Client client = Client.create();' 'WebResource webResource = client。資源(BASE_URI);' 'String jsonData = webResource.path(「foo /」)。accept(「application/json」)。get(String.class);' – KnownSubset

8

春天帶有一個叫做RestTemplatejavadoc)的類,它應該使這種事情變得簡單。它隱藏了HTTP處理並提供了一個REST風格的操作界面。它包括支持從JSON轉換到JSON的消息轉換器(在這種情況下,Spring支持Jackson庫)。

Spring整合對於這個來說是巨大的矯枉過正 - REST本質上很簡單。 Commons HttpClient會工作,但留給你額外的工作要做。如何使用RestTemplate以及JSON消息轉換。

+0

請您提供更多信息,爲什麼spring集成是過度殺人? – johnny

+0

@johnny:因爲它是一個用於集成遺留系統的大型複雜庫。 'RestTemplate'只是一個類,它很容易使用,它已經是Spring的一部分。聽起來像對我來說是一件容易的事。 – skaffman

+0

@johnny看到我的答案...你可以插入Commons Http到Spring RestTemplate中。 –

14

正如其他人已經提到春季RestTemplate澤西休息客戶端將完成這項工作。我用過兩種。他們與傑克遜和IIRC一起工作很好,他們會自動使用它,如果發現(肯定是春天)。

我喜歡Spring RestTemplate的一個優點是可以插入Commons HTTP作爲傳輸。所以,如果你有一些奇怪的標題,cookies,超時,線程,你可以配置Commons HTTP,然後把它放到RestTemplate中。

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
restTemplate.setErrorHandler(new DefaultResponseErrorHandler()); 
CommonsClientHttpRequestFactory f = new CommonsClientHttpRequestFactory(); 
f.setReadTimeout(120 * 1000); 

的一點是,如果你想使用共享HTTP客戶端然後根據@Skaffman說RestTemplate是一個沒有腦子了更復雜的東西!

+0

聽起來不錯。那麼,在Spring Rest Template中,我可以實現以下功能嗎? 1)對http://xyz.com進行HTTP調用2)獲取json響應3)解析json對java對象的響應 – johnny

+0

是的,如果你插入MessageConverter,它甚至會自動爲你做。看到它的javadoc。 –

+0

我在之前的示例代碼中使用了錯誤的消息轉換器(jaxb),現在使用jackson。 –