Tutorial/Java ve Spring Boot

Java ve Spring Boot ile döviz kurları

RestClient, BigDecimal, ortam tabanlı kimlik doğrulama ve güncellik alanlarıyla tipli bir Spring Boot istemcisi kurun.

ERexchangerate.dev·Jul 17, 2026·6 dk okuma

Spring RestClient JSON yanıtını Java record içine eşler. Kurları BigDecimal olarak tutun, anahtarı yapılandırmadan alın ve source, market_session, data_updated_at alanlarını koruyun.

Key points
Spring RestClient kullanın.
Kur ve tutarlarda BigDecimal kullanın.
Anahtarı EXCHANGERATE_API_KEY üzerinden alın.
data_updated_at alanını kurla saklayın.

Tipli RestClient oluşturun

Record kur haritasını ve yorumlama alanlarını korur. Jackson, snake_case adlarını @JsonProperty ile eşler.

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);
  }
}

Anahtarı ortamdan yükleyin

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

Güncellik ve hataları açıkça işleyin

RestClient.retrieve() 4xx ve 5xx yanıtlarında hata verir. Sınırlı zaman aşımı belirleyin, yalnızca geçici hataları yineleyin. 401 anahtar düzeltmesi, 429 trafik azaltımı gerektirir.

Hesap boyunca BigDecimal kullanın
Kuru tam hassasiyette tutun ve yalnızca nihai tutarı hedef para birimine göre yuvarlayın.
  • Bir istemciyi yeniden kullanın.
  • Bağlantı ve okuma zaman aşımını belirleyin.
  • Yalnızca başarıyı önbelleğe alın.
  • Kaynak, marketSession ve dataUpdatedAt alanlarını kurla birlikte saklayın.
ER
exchangerate.dev
FX verileriyle çalışan geliştiriciler için entegrasyon rehberleri.

Okumaya devam edin

GuideTek çağrıda geçmiş FX zaman serisiOku Referencesource ve market_session alanlarını okumaOku GuideGösterge ve uygulanabilir FX kurlarıOku
Daha Fazla KarşılaştırmaFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
ÖğrenReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
Canlı KurlarEUR/USDGBP/USDUSD/JPY