【问题标题】:InvalidDefinitionException on jackson readvalue on custom class while deserialisatio反序列化时自定义类上的杰克逊读取值上的 InvalidDefinitionException
【发布时间】:2018-06-13 06:47:05
【问题描述】:

我在将 json 解析为我自己的自定义类时收到了 InvalidDefinitionException。 线程“main”com.fasterxml.jackson.databind.exc.InvalidDefinitionException 中的异常:类型id.or.jisedu.repo.Book 的类型定义无效:构造函数的参数#0 [id.or.jisedu.repo.Book 的构造函数,注释:[null] ] 没有属性名称注释;多参数构造函数注解为 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。不要忘记这样做。

【问题讨论】:

    标签: kotlin jackson


    【解决方案1】:

    是的,注册 KotlinModule 会有所帮助。注册 Kotlin 模块:

    1. 为 build.gradle 添加依赖:

      implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8")

    2. 创建对象映射器:

      import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper val mapper = jacksonObjectMapper()

    更多信息https://www.baeldung.com/kotlin/jackson-kotlin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-12
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多