Wie bekomme ich MOXy, um JSON in LocalDate
und LocalDateTime
zu entpacken?Unmarshalling LocalDate/LocalDateTime mit MOXy
Ich habe eine @GET
Methode bekommt, die mit drei Feldern der Typen LocalDate
, LocalDateTime
und Date
jeweils eine Probe Instanz erzeugt.
diesen Endpunkt Schlagen, erhalte ich:
{
"localDate": "2017-07-11",
"localDateTime": "2017-07-11T10:11:10.817",
"date": "2017-07-11T10:11:10.817+02:00"
}
poste ich dann die oben genannten Daten zu meiner @POST
Methode, die einfach die Daten wieder zurückgibt:
{
"date": "2017-07-11T10:11:10.817+02:00"
}
Wie Sie sehen können, sowohl localDate
und localDateTime
sind in dem Prozess verloren, da MOXy diese zwei Felder nicht initialisiert.
Was gibt? MOXy scheint Serialisierung dieser Typen zu unterstützen, aber keine Deserialisierung?
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Path("/test/date")
public class DateTest {
public static class Data {
public LocalDate localDate;
public LocalDateTime localDateTime;
public Date date;
}
@GET
@Path("roundtrip")
public Response roundtrip() {
Data sample = getSample();
return roundtrip(sample);
}
@POST
@Path("roundtrip")
@Consumes(MediaType.APPLICATION_JSON)
public Response roundtrip(Data t) {
return Response.status(Response.Status.OK).entity(t).build();
}
protected Data getSample() {
final Data data = new Data();
data.localDate = LocalDate.now();
data.localDateTime = LocalDateTime.now();
data.date = new Date();
return data;
}
}
Moxy Version: jersey-media-moxy-2.25.1
Ist es wirklich "serialisieren" (im allgemeineren Sinne) oder ruft es einfach toString() ?. Es besteht ein Unterschied. Bis MOXy/JAXB tatsächlich Java8-Zeit unterstützt, müssen Sie wahrscheinlich [einen XMLAdapter verwenden] (http://blog.bdoughan.com/2011/05/jaxb-and-joda-time-dates-and-times.html). Oder du kannst Jackson anstelle von MOXy verwenden und [nutze seinen Java8-Zeit-Support] (https://stackoverflow.com/a/28803634/2587435) –
@peeskillet Ich dachte nicht an diese Möglichkeit. Ich habe [deinen Beitrag] gelesen (https://Stackoverflow.com/a/26825079/383124) und verstanden, dass es bedeutet, dass es unterstützt wurde. – phant0m
In diesem Beitrag gab ich beide Beispiele von dem, was ich als Lösungen in meinem vorherigen Kommentar erwähnte (d. H. Einen Adapter oder Schalter zu Jackson) –