我正在开发一个 Spring Boot 应用程序,我遇到了以下问题。我必须从从 REST 调用中检索到的 JSON 输出中设置简单 DTO 对象的值。
基本上我正在调用这个GET API:https ://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=eur
如您所见,它返回如下 JSON 响应:
{
"ethereum": {
"eur": 2509.13
}
}
所以我有这个CoingeckoPriceDTO类:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class CoingeckoPriceDTO {
String coin;
BigDecimal price;
}
然后我有这个服务方法:
@Service
@Log
public class CoingeckoInfoServiceImpl implements CoingeckoInfoService {
@Autowired
private RestTemplate restTemplate;
String coinPriceApiUrl = "https://api.coingecko.com/api/v3/simple/price?ids={coinName}&vs_currencies={targetCurrency}";
@Override
public CoingeckoPriceDTO getCoinPrice(String coinName, String targetCurrency) {
CoingeckoPriceDTO result = new CoingeckoPriceDTO();
String completeUrl = this.coinPriceApiUrl.replace("{coinName}", coinName).replace("{targetCurrency}", targetCurrency);
log.info("completeUrl: " + completeUrl);
String responseStr = this.restTemplate.getForObject(completeUrl, String.class);
log.info("responseStr: " + responseStr);
return result;
}
}
它只是通过REST模板执行调用,然后将其打印为字符串,实际上它将包含预期 JSON 响应的字符串打印为字符串:
responseStr: {"ethereum":{"eur":2499.04}}
现在我的问题是将这些值放入之前的CoingeckoPriceDTO字段中。我认为我需要做一些 JSON 操作来做到这一点:
特别是我必须使用返回的 JSON 检索的以太坊字符串设置我的 DTO字符串硬币字段(请注意,这不是字段值,而是字段名称。我不知道如何保留它并将其放入我的 DTO对象字段)。然后我必须使用 JSON 中的eur值设置我的 DTO BigDecimal 价格字段。
我怎样才能实现这样的行为?