Spring集成或Apache HTTP客户端

时间:2011-07-27 19:48:35

标签: apache spring http client integration

我有一个spring应用程序,它需要为某些数据调用基于REST的外部API调用。

API的数据格式是JSON。

我的问题是,以下哪个选项更好,重量更轻,可以进行外部api调用

  1. Spring集成(使用ws:outbound-gateway)

  2. Apache Commons HttpClient

  3. 请分享您的想法...

3 个答案:

答案 0 :(得分:15)

正如其他人提到的那样, Spring RestTemplate Jersey Rest Client 都可以完成这项工作。我用过这两个。他们都与Jackson和IIRC合作很好,如果找到的话他们会自动使用它(肯定是春天)。

我喜欢Spring RestTemplate的一个优点是你可以插入 Commons HTTP 作为传输。因此,如果您有一些奇怪的标题,cookie,超时,线程,您可以配置Commons HTTP,然后将其放入RestTemplate。

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

关键是如果你正在考虑使用Commons HTTP Client,那么@Skaffman说RestTemplate对于更复杂的东西是一个明智的选择!

答案 1 :(得分:9)

Spring带有一个名为RestTemplatejavadoc)的类,它可以使这类事情变得简单。它隐藏了HTTP处理并提供了REST样式的操作界面。它包括对用于转换JSON的消息转换器的支持(在这种情况下,Spring支持Jackson库)。

Spring Integration对此非常有用 - REST本质上很简单。 Commons HttpClient可以工作,但除此之外还有额外的工作要做。

请参阅the section of the Spring docs了解如何使用RestTemplate以及JSON消息转换。

答案 2 :(得分:3)

我使用过Spring& Jersey。通过使用诸如@GET& @POST&的注释,Jersey可以轻松地使用Spring构建RESTful Web服务。与JAX-RS库捆绑的@PUT @DELETE