Пользовательская сериализация ZoneOffset ZoneId

Как лучше всего сериализовать ZoneId или ZoneOffset из формата +03:00 в формат +03.00 с помощью Джексона? Или, может быть, есть другой способ изменить : на .

2 ответа

Чтобы решить эту проблему, я сделал собственный сериализатор:

      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)
    }
}

и использовал аннотацию@JsonSerialize(using = ZoneOffsetSerializer::class)для необходимых полей

Смещение зоны,+03:00уже находится в стандартном формате ISO 8601 . Поэтому вы должны научить издателя/потребителя придерживаться этого. Однако, если вы хотите изменить его в желаемом формате по какой-либо причине, вот как вы можете это сделать:

      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);
    }
}

Выход :

      +03.00

Узнайте больше о современном API Date-Time от Trail: Date Time .

Другие вопросы по тегам