カスタムspring LocalDateTimeのプログレッシブ/アンチプログレッシブ方式


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も同じです.