kotlin - 反序列化时自定义类上的杰克逊读取值上的 InvalidDefinitionException
问题描述
我正在将InvalidDefinitionException
json 解析为我自己的自定义类。线程“主”com.fasterxml.jackson.databind.exc.InvalidDefinitionException 中的异常:类型的类型定义无效id.or.jisedu.repo.Book
:构造函数的参数 #0 [id.or.jisedu.repo.Book 的构造函数,注释:[null]] 没有属性名称注释;当多参数构造函数在 [Source: (String)"..." 处注释为 Creator 时必须具有名称
这是导致问题的行:
val wrapper: BookWrapper = mapper.reader().forType(BookWrapper::class.java).readValue("""
{
"book": {
"publisher": "Pearson",
"image": "https:\/\/images.isbndb.com\/covers\/34\/13\/9780134093413.jpg",
"title_long": "Campbell Biology (11th Edition)",
"edition": "11",
"date_published": "2016-10-29",
"authors": [
"Lisa A. Urry",
"Michael L. Cain",
"Steven A. Wasserman",
"Peter V. Minorsky",
"Jane B. Reece"
],
"title": "Campbell Biology (11th Edition)",
"isbn13": "9780134093413",
"binding": "Hardcover",
"publish_date": "2016-10-29",
"isbn": "0134093410"
}
}""")
这是我的书包类:
data class BookWrapper(@JsonProperty("book") val book: Book)
@JsonInclude(JsonInclude.Include.NON_NULL)
data class Book(
val title: String,
@JsonProperty("title_long")
val titleLong: String? = null,
val isbn: String? = null,
val isbn13: String? = null,
val dewey_decimal: String? = null,
val format: String? = null,
val publisher: String? = null,
val publish: String? = null,
val language: String? = null,
@JsonProperty("date_published")
val datePublished: String? = null,
@JsonProperty("publish_date")
val publishDate: String? = null,
val edition: String? = null,
val pages: String? = null,
val binding: String? = null,
val dimensions: String? = null,
val overview: String? = null,
val excerpt: String? = null,
val synopsys: String? = null,
val image: String? = null,
val authors: List<String>,
val subjects: List<String>? = null,
var id: Long? = null,
var amount: Int = 1
)
编辑:
我忘记注册 KotlinModule。不要忘记这样做。
解决方案
是的,注册 KotlinModule 会有所帮助。注册 Kotlin 模块:
将依赖项添加到 build.gradle:
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8")
创建对象映射器:
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
val mapper = jacksonObjectMapper()
推荐阅读
- hyperparameters - 警告“未知或未初始化的列:`ntree`。” 当尝试使用包 mlr 将超参数传递给学习者时
- python - 使用基于行值的列创建新数据框
- node.js - 找不到与 @typescript-eslint/scope-manager@4.22.1 匹配的版本
- lucene - 可以将 boost 应用于 Lucene 字段吗?
- javascript - 为什么 MutationObserver 不适用于 FullCalendar 中的标题更改?
- css - 如何在drupal 8中将所有外部css文件组合成一个文件
- javascript - TypeScript 对象数组搜索
- amazon-web-services - Amazon SQS 与 Kafka 组
- reactjs - 如何在 React 中将 JSX 附加到 DOM?
- sql - 从列中删除一个数据元素