Пользовательская сериализация 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 .