我有两个数据类A和B
data class A(val b: B, val text: String)
data class B(
@JsonProperty("b") val number: Int,
@JsonProperty(access = JsonProperty.Access.READ_ONLY) val date: String = "",
)
我的对象映射器定义如下:
val objectMapper = ObjectMapper().apply { registeredMoudle(KotlinModule())}
主要:
val json = "{\"b\": 5, \"text\": \"blabla\"}"
val a = objectMapper.readValue(json,A::class.java)
我得到一个不匹配的输入异常:无法构造“B”的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法来从字符串值(“5”)反序列化
问题是,当我尝试自行反序列化 B 时,它正在工作。所以我不明白为什么它在 A 上不起作用
这是因为你的json格式化方式,b应该是一个对象,而不是字符串。
换句话说,当你的两个类以这种方式布局时,这个(建议的 json)将不起作用:
val json = "{\"b\": "5", \"text\": \"blabla\"}"
但这会
val json2 = "{\"b\": { \"b\": 5 }, \"text\": \"blabla\"}"