Spring Boot 从外部 API 返回 JSON 字符串

Posted

技术标签:

【中文标题】Spring Boot 从外部 API 返回 JSON 字符串【英文标题】:Spring Boot to return JSON String from an external API 【发布时间】:2018-01-12 10:27:32 【问题描述】:

我有一个简单的 Spring boot 项目,它使用控制器映射从项目中的类中获取硬编码信息。

例如,如果我运行请求:localhost:8080/topics,则会返回一个 JSON 响应,其中包含我之前创建的主题对象列表

我想更进一步,让一个类通过调用此 API 并解析响应来填充变量:https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo

我相信这可以通过创建 HTTP 连接并从输入流中读取数据在 Java 中完成,但是使用 Spring Boot 执行此操作是否更简单?我不完全确定此程序的名称,因此我无法在线找到解决方案

【问题讨论】:

【参考方案1】:

由于您使用的是 Spring Boot,因此使用 Spring 的 RestTemplate 是有意义的。它带有几个开箱即用的消息转换器,默认情况下使用 Jackson 来处理 json 内容。

Spring 发布了一个很好的 Getting Started 页面,用于使用 RESTful Web 服务。

但是,该服务返回的 json 内容看起来不能很好地映射到 Java 对象,因此您可能必须将其反序列化为 HashMap 才能获取所需的数据。

【讨论】:

【参考方案2】:

我尝试过创建类似的东西。

https://github.com/StanislavLapitsky/SpringSOAProxy

这个想法是注册控制器接口。每个接口都映射到某个 URL。对于接口,会生成一个动态代理(如果实现在本地不可用)。所以开发者只需调用控制器的接口方法。为动态生成的代理调用该方法。代理使用 RestTemplate 调用远程 URL。它发送和接收 JSON 并将返回的 JSOn 反序列化为控制器返回的 POJO 对象。

您需要声明合约 - 控制器接口和 DTO 以交换数据以及映射以了解应为每个控制器调用哪个 URL。

【讨论】:

以上是关于Spring Boot 从外部 API 返回 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 应用程序中从 Api 网关(Zuul)调用外部服务(非 MSA)

在 Spring Boot 中使用 Web Client Mono 获取 API 响应错误消息

Spring Boot - 模拟对外部 API 的 POST REST 请求

如何使用 Spring Boot 应用程序从 Rest API 返回 html

Spring Boot REST API 返回 XML 作为响应

http-proxy-middleware 代理在 React js 和 Spring Boot 项目中不起作用。 GET API 返回 415 状态错误