Kotlin Spring Boot Jackson反序列化报错:无法解析AllScore类型
问题分析与解决方案
错误原因
你定义的AllScore实体和JSON中scores字段的结构完全不匹配,导致Jackson无法完成反序列化:
- JSON里的
scores是二维数组:外层数组的每个元素仍是一个数组,内层数组包含多个{c1, c2, [title]}格式的对象 - 你当前把
scores声明为List<AllScore>,试图将每个内层数组映射为包含两个HashMap的AllScore对象,这和JSON结构完全冲突,所以抛出MismatchedInputException
正确实体定义
1. 定义单个分数项实体
对应JSON中内层数组的每个对象:
data class ScoreItem( val c1: String?, val c2: String?, val title: String? // 可选字段,部分对象无该属性 )
2. 修改LiveEventInfo的scores字段类型
将scores改为匹配二维数组的List<List<ScoreItem>>,同时补充原JSON中存在的subscores字段:
data class LiveEventInfo( var eventId: Long?, var timer: String?, var timerSeconds: Long?, var timerDirection: Long?, var scoreFunction: String?, var scoreComment: String?, var scoreCommentTail: String?, var scores: List<List<ScoreItem>>?, var subscores: List<*>? // 原JSON中存在该空数组字段,需声明避免反序列化警告 )
额外说明
如果需要将内层数组的元素映射到类似matchScore/timeScore的自定义结构,你需要编写自定义Jackson反序列化器,手动处理数组到对象的映射逻辑。但优先保证实体结构和JSON完全匹配,是解决这类反序列化错误的基础。
内容的提问来源于stack exchange,提问作者Konstantin
相关产品推荐
相关产品推荐

