JAX-RS und java.Zeit.LocalDate als Eingabe-parameter
Problem mit JAX-RS und java.time.LocalDate
(java8).
Möchte ich ein Objekt übergeben, wie diese in eine JAX-RS-Methode der JSON -:
Person {
java.time.LocalDate birthDay;
}
Die exception die ich bekomme, ist:
com.fasterxml.jackson.databind.JsonMappingException
: Kein passender Konstruktor gefunden, geben Sie [einfache Art, Klassejava.time.LocalDate
]: kann nicht instanziiert, die aus JSON-Objekt (hinzufügen/aktivieren geben Sie die Informationen?) an [Quelle:io.undertow.servlet.spec.ServletInputStreamImpl@21cca2c1
; Zeile: 2, Spalte: 3]
Wie kann ich eine Art Abfangjäger, die Google maps json-Daten zu java.time.LocalDate
? Ich habe versucht, umgesetzt MessageBodyReader
, aber wenn die LocalDate
ist ein Feld in einer anderen Klasse, die ich zu schreiben, ein MessageBodyReader
für jede Klasse hält ein LocalDate
(soweit ich das verstanden hab).
(Java EE7 (nur mit Hilfe der Java ee-api und nicht möchten, dass alle Drittanbieter-Abhängigkeiten), JAX-RS, Java 8, Wildfly 8.2)
Irgendwelche Vorschläge?
- Was bedeutet das JSON Aussehen kommen über den Draht?
- Es ist java. Zeit .LocalDate
Du musst angemeldet sein, um einen Kommentar abzugeben.
Normalerweise würde ich sagen, schreiben einen Serializer/Deserializer für Jackson, aber da Sie nicht wollen, dass andere Abhängigkeiten, die Sie verwenden können, eine JAXB-Lösungen. Jackson (mit Resteasy) kommt mit Unterstützung für JAXB Annotationen. Was wir also tun können, ist schreiben Sie einfach eine
XmlAdapter
die Konvertierung von der Zeichenfolge in denLocalDate
. Ein Beispiel wäre so etwas wieKönnen Sie jede Formatierung, die Sie wollen, ich habe gerade verwendet die
DateTimeFormatter.ISO_DATE
, die im Grunde Aussehen für dieses format (2011-12-03).Dann alles, was Sie tun müssen, ist, kommentieren Sie das Feld für die getter der Typ
Wenn Sie nicht wollen, verunstalteten Ihre model-Klassen, die mit dieser annotation, dann können Sie einfach erklären, die annotation auf Paketebene.
In einem
package-info.java
- Datei im gleichen package wie die model-Klasse(es), fügen Sie dieseTest
Ergebnis :
2015-01-04
UPDATE
Auch für Jackson (ich weiß, die OP sagte, ohne Abhängigkeiten, aber das ist für andere), können Sie die jackson-datatype-jsr310 Modul. Siehe die vollständige Lösung hier
@QueryParam
oder@FormaParam
oder@PathParam
string zu pojo-Konvertierung, aber das ist hier nicht der Fall 🙂ParamConverter
. Dies ist für@QueryParam
,@FormParam
und andere@XxxParam
s