小编典典
非常感谢您的所有投入!
我选择了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