Jackson + Kotlin 的一些细节

266 阅读1分钟

自定义类型转换器

一开始我是这样设置类型转换器的:

@Configuration
class JacksonConfig {

    @Bean
    fun jackson2ObjectMapperBuilderCustomizer(): Jackson2ObjectMapperBuilderCustomizer =
        Jackson2ObjectMapperBuilderCustomizer { builder ->
            builder.serializerByType(Long::class.java, ToStringSerializer.instance)
        }
}

但是出现了问题,有下面两个对象:

data class Person(
    val id: Long
)

data class Student(
    val id: Long? = null
)

Person对象在序列化时类型转换器生效了,但是Student对象却没有生效。

解决方案

@Configuration
class JacksonConfig {

    @Bean
    fun jackson2ObjectMapperBuilderCustomizer(): Jackson2ObjectMapperBuilderCustomizer =
        Jackson2ObjectMapperBuilderCustomizer { builder ->
            builder.serializerByType(Long::class.java, ToStringSerializer.instance)
            builder.serializerByType(Long::class.javaObjectType, ToStringSerializer.instance)
        }

}

Kotlin 数据类

在使用xml文件自定义mapper方法时,需要将数据类所有的字段设置默认的参数

data class Student(
    val id: Long? = null
)