Tutorial/Java i Spring Boot

Kursy walut w Java i Spring Boot

Zbuduj typowanego klienta Spring Boot z RestClient, BigDecimal, kluczem z otoczenia i polami świeżości.

MMexchangerate.dev·Jul 17, 2026·6 min czytania

Spring RestClient mapuje JSON do record. Kursy przechowuj jako BigDecimal, klucz wstrzykuj z konfiguracji i zachowuj source, market_session oraz data_updated_at.

Key points
Użyj Spring RestClient.
Kursy i kwoty zapisuj jako BigDecimal.
Klucz czytaj z EXCHANGERATE_API_KEY.
Zapisuj data_updated_at razem z kursem.

Utwórz typowanego RestClient

Record przechowuje mapę kursów i pola potrzebne do jej interpretacji. Jackson mapuje snake_case przez @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);
  }
}

Wczytaj klucz z otoczenia

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

Jawnie obsługuj świeżość i błędy

RestClient.retrieve() domyślnie zgłasza 4xx i 5xx. Ustaw ograniczone czasy i ponawiaj tylko błędy przejściowe. 401 wymaga poprawy klucza, a 429 ograniczenia ruchu.

Zachowaj BigDecimal podczas obliczeń
Mnożenie wykonuj na BigDecimal i zaokrąglaj dopiero końcową kwotę zgodnie z walutą docelową.
  • Współdziel skonfigurowanego klienta.
  • Ustaw timeout połączenia i odczytu.
  • Buforuj tylko sukcesy.
  • Zachowaj source, marketSession i dataUpdatedAt.
MM
exchangerate.dev
Przewodniki integracyjne dla programistów pracujących z danymi FX.

Keep reading

GuideHistoryczne szeregi FX w jednym wywołaniuRead ReferenceJak czytać source i market_sessionRead GuideKurs orientacyjny a wykonywalnyRead