当前位置: 首页 > 知识库问答 >
问题:

您如何使Jackson使用Kotlin缺省参数来处理缺少的值?

裘光启
2023-03-14

我有一个Kotlin数据类,

data class SomeData(
   private val notInJson: String = "some default value",
   private val inJson: String
)
{
    "inJson" : "value"
}

有没有办法让Jackson不为它传递任何值,这样类定义中指定的默认值就可以使用了?

--编辑--

我确实向映射器注册了一个KotlinModule()。使用版本2.7.8或涉及的所有jackson包。

@Test fun jackson_kotlin_module() {
    val mapper = ObjectMapper().registerModule(KotlinModule())
    println(
        mapper.readValue("""{ "inJson" : "some value" }""",     SomeData::class.java))
}
com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple 
type, class SomeData] value failed (java.lang.IllegalArgumentException): 
Parameter specified as non-null is null: method SomeData.<init>, parameter 
notInJson
at [Source: { "inJson" : "some value" }; line: 1, column: 27]

共有1个答案

刘丰羽
2023-03-14

Default params是一个Kotlin特性。杰克逊不知道这一点,因此我们需要以某种方式通知它,以便能够支持它。谢天谢地,这里有一个出色的Jackson-Kotlin模块,让您可以这样做:

val mapper: ObjectMapper = ObjectMapper()
        .registerModule(KotlinModule()) //let Jackson know about Kotlin
...
data class SomeData(
    private val notInJson: String = "some default value",
    private val inJson: String
)
...
val data = mapper.readValue<SomeData>("""{"inJson": "sample value"}""")
println(data) // -> SomeData(notInJson=some default value, inJson=sample value)

有关如何使用它的说明,请参阅jackson-kotlin-module自述文件,并特别注意模块的版本和Jackson本身。为了使默认参数正常工作,您至少需要2.8.4版本的jackson-kotlin-module

 类似资料:
  • 目前,我的网站上有两个下拉框,其值在提交表单时转换为两个URL参数“myState”和“myShelter”。例如: https://www.atweather.org/forecast?myState=CT 我现在添加了第三个框,将有第三个相应的参数称为“myTrail”。我的问题是这样的:我如何使它,如果有人直接提交一个URL只有两个参数,浏览器不会错误的请求?我想让用户看到页面,就好像“我的

  • 在Spring Boot时发出请求并得到一个丢失的参数异常,尽管该值没有丢失。解决数独的项目 请求url为:http://localhost:8080/solvesudoku/getcellanswer/0/0 下面是错误消息: “错误”:“错误请求”, “异常”:“org.springframework.web.bind.MissingServletRequestParameterExcepti

  • 本文向大家介绍Django的URLconf中使用缺省视图参数的方法,包括了Django的URLconf中使用缺省视图参数的方法的使用技巧和注意事项,需要的朋友参考一下 一个方便的特性是你可以给一个视图指定默认的参数。 这样,当没有给这个参数赋值的时候将会使用默认的值。 例子: 在这里,两个URL表达式都指向了同一个视图 views.page ,但是第一个表达式没有传递任何参数。 如果匹配到了第一个

  • 我正在使用多处理池运行一段代码。代码在一个数据集上工作,在另一个数据集上失败。很明显,问题是数据驱动的——我不清楚从哪里开始故障排除,因为我收到的错误如下。任何关于起点的提示都会非常有用。这两组数据都是使用相同的代码准备的——所以我不认为会有什么不同——但我在这里。 另请参见Robert的评论-我们在操作系统、python版本3.6(我有3.4,他有3.6)和完全不同的数据集方面存在差异。然而,这

  • 本文向大家介绍如何处理缺失值数据?相关面试题,主要包含被问及如何处理缺失值数据?时的应答技巧和注意事项,需要的朋友参考一下 数据中可能会有缺失值,处理的方法有两种,一种是删除整行或者整列的数据,另一种则是使用其他值去填充这些缺失值。在Pandas库,有两种很有用的函数用于处理缺失值:isnull()和dropna()函数能帮助我们找到数据中的缺失值并且删除它们。如果你想用其他值去填充这些缺失值,则

  • 本文向大家介绍python 函数的缺省参数使用注意事项分析,包括了python 函数的缺省参数使用注意事项分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python 函数的缺省参数使用注意事项。分享给大家供大家参考,具体如下: python的函数支持4种形式的参数:分别是必选参数、 缺省参数、 可变长参数、关键字参数;而且参数的书写顺序也是又一定规定的,顺序如下 下面针对缺省型参数分