春季集成或Apache HTTP客户端

问题描述:

我有一个春天的应用程序,需要调用一些数据基于REST的外部API调用。春季集成或Apache HTTP客户端

来自API的数据格式是JSON。

我的问题是以下哪个选项之一是更好,重量轻,使外部API调用

  1. Spring集成(使用WS:出站网关)

  2. 的Apache Commons的HttpClient

请分享你的想法...

+0

请参阅http://*.com/questions/221442/rest-clients-for-java –

我已使用弹簧& 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

春天带有一个叫做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中。 –

正如其他人已经提到春季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。 –