Ich habe eine Cosmos DB-Datenbank mit den folgenden Beispieldaten im Container:
Code: Select all
{
"postedDate": "2025-01-01",
... Other fields
}
Repository:
Code: Select all
public interface TransactionRepo extends ReactiveCosmosRepository {
Flux findByPostedDateBetween(LocalDate startPostedDate, LocalDate endPostedDate);
}
Entität:
Code: Select all
@Container("containerName")
public class Transaction{
private LocalDate postedDate;
// Other fields including partition key, id, etc
}
Wenn ich die Methode findByPostedDateBetween() aufrufe, werden keine Daten zurückgegeben. Es stellte sich heraus, dass das
Problem darin besteht, dass der interne Azure SDK ObjectMapper, der in com.azure.cosmos.implementation.Utils.createAndInitializeObjectMapper() erstellt wurde, startPostedDate und endPostedDate in ein Array [ Jahr, Monat, Datum ] serialisiert, was den Vergleich sicherlich zunichte macht. Mir ist keine Möglichkeit bekannt, die Objekt-Mapper-Konfiguration zu aktualisieren, um write-dates-as-timestamps=false hinzuzufügen.
Ich möchte Datumsangaben nicht als Zeichenfolgen behalten, aber bisher sehe ich keine andere Möglichkeit. Perplexity schlug mehrere Optionen vor, darunter einen benutzerdefinierten Konverter, aber keine davon funktionierte.
Spring Boot 3, Java 17.