Spring 集成或 Apache HTTP 客户端
Posted
技术标签:
【中文标题】Spring 集成或 Apache HTTP 客户端【英文标题】:Spring Integration or Apache HTTP Client 【发布时间】:2011-10-14 14:06:02 【问题描述】:我有一个 spring 应用程序,它需要为某些数据调用基于 REST 的外部 API 调用。
API 的数据格式是 JSON。
我的问题是以下哪个选项更好且更轻量级来进行外部 api 调用
Spring 集成(使用 ws:outbound-gateway)
Apache Commons HttpClient
请分享你的想法...
【问题讨论】:
见***.com/questions/221442/rest-clients-for-java 【参考方案1】:正如其他人所提到的,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 客户端,那么正如 @Skaffman 所说,RestTemplate 是更复杂的事情!
【讨论】:
听起来很棒。那么,使用 Spring Rest Template,我可以实现以下目标吗? 1) 对xyz.com 进行 HTTP 调用 2) 获取 json 响应 3) 将 json 响应解析为 java 对象 是的,如果您插入 MessageConverter,它甚至会自动为您完成。请参阅 javadoc。 我之前的示例代码中有错误的消息转换器 (jaxb) 现在使用的是 jackson。 明白了。感谢您提供详细信息。从您的详细信息来看,Spring Rest 模板听起来很适合我的应用程序。首先,我将通过 Spring Rest Template javadoc 了解实现细节。 谢谢@Adam Gent。建议的实现对我有用,并为修改我的 HTTPClient 调用设置提供了相当大的灵活性。春天有没有办法测量 HTTP 调用性能(延迟)??【参考方案2】:Spring 带有一个名为RestTemplate
(javadoc) 的类,它应该可以让这类事情变得简单。它隐藏了 HTTP 处理并提供了 REST 样式的操作界面。它包括对用于与 JSON 相互转换的消息转换器的支持(在这种情况下,Spring 支持 Jackson 库)。
Spring 集成在这方面是大材小用 - REST 本质上很简单。 Commons HttpClient 可以工作,但除此之外还有额外的工作要做。
查看the section of the Spring docsRestTemplate
的使用方法,以及JSON消息转换。
【讨论】:
能否请您提供更多信息,为什么 Spring 集成是过度杀戮? @johnny:因为它是一个用于与遗留系统集成的大型复杂库。RestTemplate
只是一个类,使用方便,已经是 Spring 的一部分。对我来说听起来很简单。
@johnny 看到我的答案...你可以将 Commons Http 插入 Spring RestTemplate。【参考方案3】:
我用过 Spring & Jersey。 Jersey 通过使用 @GET
&@POST
& @PUT
@DELETE
与 JAX-RS 库捆绑等注释,可以轻松地使用 Spring 构建 RESTful Web 服务。
【讨论】:
我所有的 API 请求都是简单的 Get 请求,数据以 JSON 形式返回。我最初的想法是使用 Apache HTTP 客户端进行 API 调用并使用 jackson 解析 JSON 响应。我开始阅读有关 spring 集成的信息,并想知道是否有人为此目的使用 spring 集成... 您可以通过 Jersy for JSON 执行以下操作来执行简单的获取请求:String BASE_URI = "http://localhost:8080/HelloWorldWebapp/resources";
Client client = Client.create();
WebResource webResource = client.resource(BASE_URI);
String jsonData = webResource.path("foo/").accept("application/json").get(String.class);
以上是关于Spring 集成或 Apache HTTP 客户端的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 应用程序中,IBM MQ 的集成工具(Apache camel 或 Spring 集成)容易或更好[关闭]
集成框架Spring Integration, Mule ESB or Apache Camel比较