Tutorial/Java وSpring Boot

أسعار الصرف في Java وSpring Boot

أنشئ عميل Spring Boot منضبط الأنواع باستخدام RestClient وBigDecimal ومفتاح من البيئة.

ERexchangerate.dev·Jul 17, 2026·قراءة 6 دقائق

يحوّل Spring RestClient استجابة JSON إلى record. استخدم BigDecimal واحتفظ بـsource وmarket_session وdata_updated_at.

Key points
استخدم Spring RestClient.
استخدم BigDecimal للأسعار والمبالغ.
اقرأ المفتاح من EXCHANGERATE_API_KEY.
احفظ data_updated_at مع السعر.

أنشئ RestClient منضبط الأنواع

يحتفظ record بخريطة الأسعار وحقول تفسيرها، ويربط Jackson أسماء snake_case عبر @JsonProperty.

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 في الحساب
احتفظ بدقة السعر كاملة، وقرّب المبلغ النهائي فقط حسب العملة.
  • أعد استخدام عميل واحد.
  • ضع مهلة اتصال وقراءة.
  • خزّن النجاح فقط.
  • احفظ source وmarketSession وdataUpdatedAt مع السعر.
ER
exchangerate.dev
أدلة تكامل للمطورين العاملين مع بيانات العملات.

تابع القراءة

Guideسلسلة أسعار تاريخية في طلب واحداقرأ Referenceقراءة source وmarket_sessionاقرأ Guideالسعر الاسترشادي والتنفيذياقرأ
المزيد من المقارناتFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
تعلّمReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youأسعار الصرف المرجعية للبنك المركزي الأوروبي، موضحة
أسعار مباشرةEUR/USDGBP/USDUSD/JPY