Tutorial/Java 與 Spring Boot

在 Java 與 Spring Boot 使用匯率

使用 RestClient、BigDecimal、環境變數認證和明確的新鮮度欄位建立有類型的 Spring Boot 匯率客戶端。

MMexchangerate.dev·Jul 17, 2026·6 分鐘閱讀

Spring RestClient 可把 exchangerate.dev JSON 直接映射至 Java record。匯率使用 BigDecimal,密鑰從設定注入,並保留 sourcemarket_sessiondata_updated_at

Key points
使用 Spring RestClient 建立同步、有類型的客戶端。
BigDecimal 表示匯率和金額。
EXCHANGERATE_API_KEY 載入密鑰。
data_updated_at 與匯率一同儲存。

建立有類型的 RestClient

record 保留匯率映射及解讀所需欄位。Jackson 以 @JsonProperty 映射 snake_case 名稱,Spring 處理 HTTP 與 JSON 解碼。

java · ExchangeRateClient.javacopy
package com.example.fx;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClient;

record LatestRates(
    String base,
    String source,
    @JsonProperty("market_session") String marketSession,
    @JsonProperty("data_updated_at") Instant dataUpdatedAt,
    Map<String, BigDecimal> rates
) {}

@Component
public final class ExchangeRateClient {
  private final RestClient client;

  public ExchangeRateClient(
      RestClient.Builder builder,
      @Value("${exchangerate.api-key}") String apiKey
  ) {
    this.client = builder
        .baseUrl("https://api.exchangerate.dev/v1")
        .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + apiKey)
        .build();
  }

  public LatestRates latest(String base) {
    return client.get()
        .uri("/latest/{base}?symbols=EUR,GBP", base)
        .retrieve()
        .body(LatestRates.class);
  }
}

從環境載入密鑰

yaml · application.yamlcopy
exchangerate:
  api-key: ${EXCHANGERATE_API_KEY}

明確處理新鮮度與錯誤

RestClient.retrieve() 預設會為 4xx 和 5xx 拋出例外。設定有限逾時,只重試短暫故障。401 需要修正密鑰;持續 429 需要減少流量或提高限額。

計算期間保持 BigDecimal
把匯率與金額解析為 BigDecimal,使用明確的四捨五入規則,並只在最終展示目標貨幣時四捨五入。
  • 重用一個已設定的 RestClient。
  • 設定連線與讀取逾時。
  • 只快取成功回應。
  • 保存 source、marketSession 與 dataUpdatedAt。
MM
exchangerate.dev
為使用外匯數據的開發者而設的整合指南。

Keep reading

Guide一次取得歷史外匯時間序列Read Reference閱讀 source 與 market_sessionRead Guide指示性匯率與可執行匯率Read