MOXyでJSONを非マーシャル化してLocalDate
とLocalDateTime
にするにはどうすればよいですか?MOXyでLocalDate/LocalDateTimeをアンマーシャリングする
私はタイプそれぞれLocalDate
、LocalDateTime
とDate
、の3つの分野でのサンプルインスタンスを生成@GET
方法を持っています。
そのエンドポイントを打つ、私が取得:
{
"date": "2017-07-11T10:11:10.817+02:00"
}
あなたが見ることができるように、両方のlocalDate
:
{
"localDate": "2017-07-11",
"localDateTime": "2017-07-11T10:11:10.817",
"date": "2017-07-11T10:11:10.817+02:00"
}
は、私はその後、もう一度データを返す私の@POST
方法に上記のデータをPOSTおよびlocalDateTime
は、MOXyがこれらの2つのフィールドを初期化しないため、プロセスで失われます。
何がありますか? MOXyはこれらの型のシリアル化をサポートしているようですが、逆シリアル化はサポートされていませんか?
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バージョン:jersey-media-moxy-2.25.1
これは実際には(より一般的な意味で)「シリアライズ」しているのですか、それとも単純にtoString()を呼び出していますか?違いがあります。 MOXy/JAXBが実際にJava8の時間をサポートするまで、おそらく[XMLAdapterを使う]必要があります(http://blog.bdoughan.com/2011/05/jaxb-and-joda-time-dates-and-times.html )。または、MOXyの代わりにJacksonを使用して[Java 8の時間サポートを使用する](https://stackoverflow.com/a/28803634/2587435) –
@peeskillet私はこの可能性については考えていませんでした。私はあなたの記事(https://stackoverflow.com/a/26825079/383124)を読んで、それがサポートされていたということを理解しました。 – phant0m
その投稿では、前回のコメントで解決策として挙げたものの両方の例を実際に提示しました(つまり、アダプターやジャクソンへの切り替えを使用します)。 –