我有一个spring应用程序,它需要为某些数据调用基于REST的外部API调用。
API的数据格式是JSON。
我的问题是,以下哪个选项更好,重量更轻,可以进行外部api调用
Spring集成(使用ws:outbound-gateway)
Apache Commons HttpClient
请分享您的想法...
答案 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带有一个名为RestTemplate
(javadoc)的类,它可以使这类事情变得简单。它隐藏了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
。