JAX-RS und java.time.LocalDate als Eingabeparameter

8

Problem mit JAX-RS und java.time.LocalDate (java8).

Ich möchte ein Objekt wie dieses in eine JAX-RS-Methode mit JSON übergeben:

%Vor%

Die Ausnahme, die ich bekomme, ist:

  

com.fasterxml.jackson.databind.JsonMappingException : Es wurde kein geeigneter Konstruktor für type gefunden [einfacher Typ, Klasse java.time.LocalDate ]: kann nicht vom JSON-Objekt instanziiert werden (muss Typinformationen hinzugefügt / aktiviert werden?) at [Quelle: io.undertow.servlet.spec.ServletInputStreamImpl@21cca2c1 ; Zeile: 2, Spalte: 3]

Wie kann ich eine Art Interceptor erstellen, der json-dates auf java.time.LocalDate abbildet? Ich habe versucht, eine MessageBodyReader implementiert, aber wenn die LocalDate ist ein Feld in einer anderen Klasse, muss ich eine MessageBodyReader für jede Klasse schreiben, die eine LocalDate (so weit wie ich habe verstanden).

(Java EE7 (nur die javaee-api verwenden und keine Abhängigkeiten von Drittanbietern wollen), JAX-RS, Java 8, Wildfly 8.2)

Irgendwelche Vorschläge?

    
jorgen.ringen 04.01.2015, 18:27
quelle

1 Antwort

21

Normalerweise würde ich sagen, einen Serializer / Deserializer für Jackson zu schreiben, aber da Sie keine anderen Abhängigkeiten wollen, können Sie eine JAXB-Lösung verwenden. Jackson (mit Rasteasy) kommt mit Unterstützung für JAXB Annotationen. Was wir also tun können, ist eine XmlAdapter , um vom String zum LocalDate zu konvertieren. Ein Beispiel wäre etwas wie

%Vor%

Sie können jede gewünschte Formatierung wählen, ich habe einfach die DateTimeFormatter.ISO_DATE , die grundsätzlich nach diesem Format suchen (2011-12-03).

Dann müssen Sie nur noch das Feld für den Getter des Typs

annotieren %Vor%

Wenn Sie Ihre Modellklassen nicht mit dieser Anmerkung überschreiben möchten, können Sie die Annotation einfach auf Paketebene deklarieren.

Fügen Sie in einer package-info.java -Datei im selben Paket wie die Modellklasse (n) dieses

hinzu %Vor%

Test

%Vor%

Ergebnis: 2015-01-04

AKTUALISIEREN

Auch für Jackson (ich weiß, dass das OP ohne Abhängigkeiten gesagt hat, aber das ist für andere), können Sie die jackson- datatype-jsr310 -Modul. Siehe vollständige Lösung hier

    
Paul Samsotha 05.01.2015, 01:24
quelle

Tags und Links