java time 格式_如何使用Jackson和java.time解析不同的ISO日期/时间格式?

小编典典

非常感谢您的所有投入!

我选择了jeedas建议的解串器和Ole VV建议的格式化器(因为它更短)。

class DefensiveIsoOffsetDateTimeDeserializer : JsonDeserializer() {

private val formatter = DateTimeFormatterBuilder()

.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)

.appendPattern("[XXX][XX][X]")

.toFormatter()

override fun deserialize(p: JsonParser, ctxt: DeserializationContext)

= OffsetDateTime.parse(p.text, formatter)

override fun handledType() = OffsetDateTime::class.java

}

我还添加了一个自定义序列化程序,以确保在生成json时我们使用正确的格式:

class OffsetDateTimeSerializer: JsonSerializer() {

override fun serialize(

value: OffsetDateTime,

gen: JsonGenerator,

serializers: SerializerProvider

) = gen.writeString(value.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME))

override fun handledType() = OffsetDateTime::class.java

}

将所有部分放在一起,我@Configuraton在spring类路径中添加了一个类,以使其在数据类上没有任何注释地工作:

@Configuration

open class JacksonConfig {

@Bean

open fun jacksonCustomizer() = Jackson2ObjectMapperBuilderCustomizer {

it.deserializers(DefensiveIsoOffsetDateTimeDeserializer())

it.serializers(OffsetDateTimeSerializer())

}

}

2020-05-30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值