首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Instant序列化并反序列化为‘Instant dd`’

将Instant序列化并反序列化为‘Instant dd`’
EN

Stack Overflow用户
提问于 2021-10-13 15:39:09
回答 1查看 591关注 0票数 0

我有这样一个POST API:

代码语言:javascript
复制
    @JsonDeserialize(using = MyCustomDeserializer.class)
    @JsonSerialize(using = MyCustomSerializer.class)
    @NotNull(message = "fromDate should not be blank!")
    @FutureOrPresent(message = "fromDate must be of Future or Present")
    private Instant fromDate;

我的实用程序包中有自定义序列化程序和反序列化程序,如下所示:

代码语言:javascript
复制
public class MyCustomSerializer extends JsonSerializer<Instant> {
    private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC);

    @Override
    public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
        String str = fmt.format(value);

        gen.writeString(str);
    }
}
代码语言:javascript
复制
public class MyCustomDeserializer extends JsonDeserializer<Instant> {

    private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC);

    @Override
    public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        LocalDate date = LocalDate.parse(p.getText());
        return Instant.from(fmt.parse(date.toString()));
    }
}

我想在内部保存时间组件作为一天的开始。API应该只由date接收和输出。

我尝试将this转换为Instant。有人能帮助我如何做到这一点(将db存储为date+start_of_day)并将其作为yyyy公开/消费吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 13:46:37

TL;DR

代码语言:javascript
复制
    return date.atStartOfDay(ZoneOffset.UTC).toInstant();

(未经测试,请原谅任何输入错误。)

详细信息

你真想把正方形的钉子插进圆孔里。Instant是一个时间点,在那个时间点上,它是两个或三个不同时区的不同日期。适应UTC会有帮助,然后我们就可以让它开始工作了。但还是不太理想。该差异的标准解决方案(hack)是将日期表示为某个时区的一天的开始,UTC是一个很好的选择。

为什么您的代码不起作用

在反序列化器中解析日期(格式化后)将给出日期和UTC偏移量,但不提供一天中的时间。我们需要这三个人来确定一个明确的时间点。相反,在我的代码中,我明确地指定了一天的开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69558412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档