Jersey-parsing Java 8 Datum Uhrzeit
Dies ist mein user-Klasse, und ich speichern ISO-konforme Datum-Uhrzeit in meiner Datenbank.
public class User {
@Id
private String id;
private String email;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime loginDate;
}
Hier ist mein Jersey-controller:
@POST
@Consumes("application/json")
@Produces("application/json")
public Response create( User user) {
Map<Object, Object> apiResponse = new HashMap<Object, Object>();
Map<Object, Object> response = new HashMap<Object, Object>();
user = (User) userService.create(user);
}
Wie kann kann ich konsumieren, ein datetime-format, wie dieses in jersey? Ist es möglich, eine datatime String
und erstellen Java 8 date-time-Objekt automatisch?
{
"email" : "[email protected]"
"loginDate" : "2015-04-17T06:06:51.465Z"
}
#
Update:
War ich mit Spring-boot-jersey, und hatte andere jsr-Pakete
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
So dass ich Sie entfernt alle Pakete mit Ausnahme von spring-boot-jersey-Paket.
verwenden Sie diese Anmerkung für LocalDateTime
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
Dieser Art, die ich verbrauchen kann Isodatum und speichern Isodatum() zu mongodb und produzieren volle formatiert mongodb LocalDateTime auf das frontend.
Problem gelöst.
- Wahrscheinlich gibt es eine Bibliothek, die jemand geschrieben hat, dies zu tun, wenn nicht, müssen Sie möglicherweise schreiben Sie Ihre eigenen benutzerdefinierten Konverter. Siehe blog.dejavu.sk/2014/02/11/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paar Optionen, die ich sehe...
Option 1:
Vorausgesetzt Sie haben die JAXB annotation Unterstützung mit Jackson als JSON-Anbieter...
Man könnte eine
XmlAdapter
. Zum BeispielSiehe die Instant-API für weitere Informationen.
Dann kann man nur beschriften Sie das Feld/die Eigenschaft mit dem adapter
Könnten Sie auch erklären, die annotation auf Paketebene, so dass alle Anwendungen in der Paket-verwenden Sie den adapter, ohne die Notwendigkeit, zu kommentieren. Tun Sie dies in einer Datei namens
package-info.java
in die Verpackung gelegtOption 2:
Verwenden Sie die Jackson-APIs direkt. Bedeutung, Verwendung einer
JsonDeserializer
undJsonSerializer
. Zum BeispielKönnen Sie dieses in das Feld/property-Ebene
Oder an der
ObjectMapper
Ebene (so dass Sie nicht brauchen, um zu kommentieren überall)Im Grunde, was passiert, ist, dass die
MessageBodyWriter
/MessageBodyReader
verwendet für ummarshalling/marshalling, rufen diegetContext
Methode, um denObjectMapper
Hinweis:
Den oben genannten Lösungen analysieren von format
2007-12-03T10:15:30.00Z
, dokumentiert, wie inSofortige.parse
, und serialisieren, um das gleiche format, wie dokumentiert inDateTimeFormatter.ISO_INSTANT
Den oben genannten wird auch vorausgesetzt, Sie sind mit Jackson, da der Serializer. Ich benutzte die unten Abhängigkeit (mit Jersey 2.16) um zu testen,
Die Abhängigkeit nutzt eine
JacksonJaxbJsonProvider
für JAXB annotation unterstützen. Wenn Sie eine niedrigere version von Jersey wie 1.x, diejersey-json
Abhängigkeit sollte bieten JAXB annotation Unterstützung, wenn Sie aktivieren die POJO-mapping-Funktion. Alternativ zum Jersey-1.x, wenn Sie verwenden möchten, Jackson 2, können Sie diese Abhängigkeitwas ist es eigentlich, was verwendet wird, durch
jersey-media-json-jackson
. So könnte man explizit registrieren dieJacksonJaxbJsonProvider
oder fügen Sie die Jackson-Paket (com.fasterxml.jackson.jaxrs.json
) Liste von Paketen zu ScannenUPDATE
Siehe Auch:
ContextResolver
ich vergaß das register derSimpleModule
🙂mapper.registerModule(module);
Aus Bearbeiten.ObjectMapper
, wenn Sie das Scannen für alle Ihre Ressource-Klassen (diejenigen, versehen mit@Path
), dann dieContextResolver
sollte automatisch abgeholt werden mit der@Provider
annotation. Ist keine zusätzliche Konfiguration erforderlich. Ich würde eine print-Anweisung in dergetContext
Methode, um zu sehen, wenn es aufgerufen wird, wenn serialisieren. Lassen Sie es mich wissen. Auch haben Sie versucht, zu Deserialisieren? Hat das zu arbeiten?