カスタムspring LocalDateTimeのプログレッシブ/アンチプログレッシブ方式
7523 ワード
springはカスタムの各種タイプのJson Serializer/Json Deserializerをサポートしています.配置は簡単で、以下の通りです.
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer
import java.time.format.DateTimeFormatterBuilder
@Configuration
class ApplicationConfig {
@Bean
fun jackson2ObjectMapperBuilderCustomizer(): Jackson2ObjectMapperBuilderCustomizer {
return Jackson2ObjectMapperBuilderCustomizer { builder ->
// jackson LocalDateTimeSerializer( )
builder.serializers(
LocalDateTimeSerializer(
DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:ss")
.appendLiteral(' ')
.toFormatter(Locale.CHINESE)
)
)
// ( )
builder.deserializers(LocalDateTimeDeSerializer())
}
}
}
アンチプログレッシブLocalDateTimeDeSerializerの実現例:
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import com.fina.summer.chargeplan.extension.beijingZone
import java.time.LocalDateTime
/**
* @description LocalDateTime
*/
class LocalDateTimeDeSerializer : JsonDeserializer<LocalDateTime>() {
override fun deserialize(jsonParser: JsonParser?, p1: DeserializationContext?): LocalDateTime {
jsonParser?.text?.toLong()!!.let {
return LocalDateTime.ofEpochSecond(it.div(1000), it.rem(1000).toInt(),
ZoneOffset.of("+8"))
}
}
}
Date類もほとんど同じです.今はLocal DateTimeがオススメですので、これを使って例を挙げます.あと、これはkotlinの書き方です.javaも同じです.