首页 > 解决方案 > Jackson 跳过字段序列化 - 自定义配置

问题描述

我有自定义杰克逊配置kotlin

@Configuration
class JacksonConfiguration {

    @Bean
    fun objectMapper(): com.fasterxml.jackson.databind.ObjectMapper = jacksonObjectMapper()
            .setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
            .apply {
                registerModules(customJavaTimeModule(), KotlinModule())
                configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
            }
}

private fun customJavaTimeModule() = JavaTimeModule().apply {
    addSerializer(String::class.java, StringSerializerTypeHandler())
}

private class StringSerializerTypeHandler : JsonSerializer<String?>() {

    @Throws(IOException::class, JsonProcessingException::class)
    override fun serialize(value: String?, jgen: JsonGenerator?, provider: SerializerProvider?) {
        var outputValue: String = value.toString()

        if (!value.isNullOrEmpty()) {
            // logic for changing the string - removing diacritics
            jgen?.writeString(outputValue)
        } else {
            //provider?. // what here?
           // jgen?.writeString(value)
           // dont serialize the field at all - just skip it
        }
    }
}

null重要的是,当字段值为or时,我根本不希望该字段被序列化empty。我无法摆脱else阻塞-然后我会出错:

不能写字段名,需要一个值

我想全局设置这个逻辑。

标签: kotlinserializationjacksonrabbitmq

解决方案


解决方案1:

我不得不重写这个方法:

override fun isEmpty(provider: SerializerProvider?, value: String?): Boolean {
    return value.isNullOrEmpty()
 }

然后我可以摆脱else阻塞。


推荐阅读