يحوّل 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.
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);
}
}حمّل المفتاح من البيئة
exchangerate:
api-key: ${EXCHANGERATE_API_KEY}تعامل مع الحداثة والأخطاء بوضوح
يرمي RestClient.retrieve() خطأ عند 4xx و5xx. ضع مهلة محدودة، وأعد فقط الأخطاء المؤقتة. يتطلب 401 إصلاح المفتاح، و429 خفض الطلبات.
حافظ على BigDecimal في الحساب
احتفظ بدقة السعر كاملة، وقرّب المبلغ النهائي فقط حسب العملة.
- أعد استخدام عميل واحد.
- ضع مهلة اتصال وقراءة.
- خزّن النجاح فقط.
- احفظ
sourceوmarketSessionوdataUpdatedAtمع السعر.
ER
exchangerate.dev
أدلة تكامل للمطورين العاملين مع بيانات العملات.
