kotlin - 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
阻塞-然后我会出错:
不能写字段名,需要一个值
我想全局设置这个逻辑。
解决方案
解决方案1:
我不得不重写这个方法:
override fun isEmpty(provider: SerializerProvider?, value: String?): Boolean {
return value.isNullOrEmpty()
}
然后我可以摆脱else
阻塞。
推荐阅读
- python - 修复库中的 Pandas 面板弃用以下载多个股票代码
- xamarin - Xamarin.Auth NUGet 包未安装
- java - If-then-else 语句使用
- python - python中自定义类对象的参数传递:按引用调用还是按值调用评估?
- java - Java array.sort(arr) 输出 0 而不是 arr
- c# - 同时运行异步和同步方法
- python - 在字典中查找相似的列表值
- php - 如何完成在文件夹中显示文件的搜索表单的代码?
- javascript - 来自 node-js mysql 连接的错误未保存到数组
- apache - Apache说配置了虚拟主机,但我找不到