gpt4 book ai didi

java - 使用 MOXy 解码 LocalDate/LocalDateTime

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:24 24 4
gpt4 key购买 nike

如何让 MOXy 将 JSON 解码为 LocalDateLocalDateTime

我有一个 @GET 方法,它生成一个示例实例,其中三个字段的类型分别为 LocalDateLocalDateTimeDate

到达该端点,我得到:

{
"localDate": "2017-07-11",
"localDateTime": "2017-07-11T10:11:10.817",
"date": "2017-07-11T10:11:10.817+02:00"
}

然后,我将上述数据 POST 到我的 @POST 方法,该方法只是再次返回数据:

{
"date": "2017-07-11T10:11:10.817+02:00"
}

如您所见,localDatelocalDateTime 在此过程中都会丢失,因为 MOXy 不会初始化这两个字段。

什么给了? 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

最佳答案

根据 peeskillet 的建议,我实现了以下适配器类:

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime>{

private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

@Override
public String marshal(LocalDateTime localDateTime) throws Exception {
return localDateTime.format(DTF);
}

@Override
public LocalDateTime unmarshal(String string) throws Exception {
return LocalDateTime.parse(string, DTF);
}

}

此外,我在 MOXy 类和适配器(在子包中)所在的同一个包中创建了 package-info.java,其中包含以下内容:

@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(type=LocalDateTime.class,
value=LocalDateTimeAdapter.class)
})
package api;

import java.time.LocalDateTime;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;

import api.adapter.LocalDateTimeAdapter;

因此,编码和解码工作没有问题。通过 DTF,您可以指定应应用的格式。

关于java - 使用 MOXy 解码 LocalDate/LocalDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com