简体   繁体   English

ZoneOffset ZoneId 自定义序列化

[英]ZoneOffset ZoneId custom serialization

What is the best way to serialize ZoneId or ZoneOffset from format +03:00 to format +03.00 using Jackson?使用 Jackson 将 ZoneId 或 ZoneOffset 从格式 +03:00 序列化为格式 +03.00 的最佳方法是什么? Or may be there is another way how to change: to.或者可能有另一种方式如何改变:到。

The zone offset, +03:00 is already in the ISO 8601 standard format.区域偏移+03:00已采用ISO 8601标准格式。 Therefore, you should educate the publisher/consumer to stick to it.因此,您应该教育发布者/消费者遵守它。 However, if you want to change it in the desired format for any reason, here is how you can do it:但是,如果您出于任何原因想要以所需的格式更改它,可以按照以下方法进行操作:

import java.time.ZoneOffset;

class Main {
    public static void main(String[] args) {
        ZoneOffset offset = ZoneOffset.of("+03:00");
        String formatted = offset.toString().replace(':', '.');
        System.out.println(formatted);
    }
}

Output : Output :

+03.00

Learn more about the modern Date-Time API from Trail: Date Time .Trail:Date Time了解有关现代日期时间 API 的更多信息。

To resolve this tak I made custom serializer:为了解决这个问题,我制作了自定义序列化程序:

object ZoneOffsetSerializer : JsonSerializer<ZoneOffset>() {
    override fun serialize(value: ZoneOffset, jsonGenerator: JsonGenerator, serializers: SerializerProvider) {
        val result = "0".takeIf { value.totalSeconds == 0 } ?: value.toString().replace(':', '.')

        jsonGenerator.writeString(result)
    }
}

and used annotation @JsonSerialize(using = ZoneOffsetSerializer::class) for necessary fields并为必要的字段使用注释@JsonSerialize(using = ZoneOffsetSerializer::class)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM