kotlin - 反序列化时如何防止Jackson将kotlin.Boolean参数设置为false
问题描述
如果序列化的源(例如 json 对象)不包含该字段,我如何指示 Jackson 不要自动反序列化kotlin.Boolean
参数?false
请参阅当前示例:
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
data class Test(
var param1: String,
var param2: Boolean
)
fun main() {
val mapper = jacksonObjectMapper()
// passes, param2 is set to false, why isnt exception thrown?
val test1 = mapper.readValue("{\"param1\": \"bah\"}", Test::class.java)
// throws com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
val test2 = mapper.readValue("{\"param2\": true}", Test::class.java)
}
在我没有给布尔参数赋值的第一种情况下,如何让杰克逊抱怨异常?
我对此感兴趣,因为如果客户端没有为布尔参数赋值,我希望我的 API 停止并抱怨。我不希望在发生这种情况时将其简单地设置为 false。
谢谢!
解决方案
最后,我自己通过阅读以下问题找到了答案jackson-module-kotlin
:https ://github.com/FasterXML/jackson-module-kotlin/issues/130
显然,kotlin 的 Boolean 是原语的别名。
并且有一个杰克逊反序列化功能,称为FAIL_ON_NULL_FOR_PRIMITIVES
.
所以在我的情况下,问题是通过调用解决的objectMapper.enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
或者对于弹簧靴,属性spring.jackson.deserialization.FAIL_ON_NULL_FOR_PRIMITIVES=true
推荐阅读
- linux - WHOIS BASH 脚本有时无法获取数据
- c# - 仅在 unity3d、c# 中发生的错误(使用 Graphs)
- kotlin - 工作意向服务?还是带有 ForegroudService 的 IntentService?或两者?用于位置跟踪器 + 计时器
- c# - 引发应用程序级事件
- java - java8流连接映射输出到字符串返回java.util.stream.ReferencePipeline
- javascript - 从反应原生的下拉列表中获取未定义的选定值
- angular - 以角度获取数据
- python - 使用 pandas 根据连续值的数量进行分类
- html - 制作一个html按钮在服务器端打开一个网站
- excel - 从每个日期具有多个日期行的数据创建折线图?