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

أنشئ عميل Spring Boot منضبط الأنواع باستخدام RestClient وBigDecimal ومفتاح من البيئة، لجلب أسعار الصرف من exchangerate.dev على الخادم بأمان.

exchangerate.devJul 17, 2026قراءة 6 دقائق

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

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

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

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

java · ExchangeRateClient.java
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.yaml
exchangerate:
  api-key: ${EXCHANGERATE_API_KEY}

تعامل مع الحداثة والأخطاء بوضوح

يرمي RestClient.retrieve() خطأ عند 4xx و5xx. ضع مهلة محدودة، وأعد فقط الأخطاء المؤقتة. يتطلب 401 إصلاح المفتاح، و429 خفض الطلبات.

حافظ على BigDecimal في الحساب
احتفظ بدقة السعر كاملة، وقرّب المبلغ النهائي فقط حسب العملة.
  • أعد استخدام عميل واحد.
  • ضع مهلة اتصال وقراءة.
  • خزّن النجاح فقط.
  • احفظ source وmarketSession وdataUpdatedAt مع السعر.
ER
exchangerate.dev
أدلة تكامل للمطورين العاملين مع بيانات العملات.

تابع القراءة