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

Spring Jackson数据绑定不适用于我的Kotlin数据类

龚振濂
2023-03-14

当使用Spring的RestTemplate将一些JSON响应反序列化为对象时,我没有这样做,因为我使用了Kotlin数据类作为对象模型。

这是数据类:

data class Description (
        val descriptionShort: String,
        val descriptionLong: String,
        val productGroupName: String,
        val shortDescriptionProductGroup: String,
        val descriptionProductGroupMarketing: String
)

我使用这些依赖项:

    dependencies {
        implementation("org.springframework.boot:spring-boot-starter-webflux")
        //others
    }

    dependencyManagement {
        imports {
            mavenBom("org.springframework.boot:spring-boot-dependencies:2.2.0.RELEASE")
            //others
        }
        dependencies {
            dependency("org.springframework.cloud:spring-cloud-stream-reactive:2.2.1.RELEASE")
            dependency("com.fasterxml.jackson.module:jackson-module-kotlin:2.10.2")
            //others

        }
    }

执行涉及RestTemboard逻辑的单元测试时的错误消息:

原因:com.fasterxml.jackson.databind.exc.无效定义异常:无法构造com.company.importer.customer.converter.ut.描述的实例(没有Creator,如默认构造,存在):无法从Object值反序列化(没有基于委托或属性的Creator)

共有2个答案

娄建义
2023-03-14

一个朋友告诉我不需要arg构造函数。这在Kotlin中通过为每个属性提供默认值来实现:

data class Description (
        val descriptionShort: String = "",
        val descriptionLong: String = "",
        val productGroupName: String = "",
        val shortDescriptionProductGroup: String = "",
        val descriptionProductGroupMarketing: String = ""
)

呼延庆
2023-03-14

许多天前,我遇到了类似的问题;作为第一步,我解决了@xetra11的响应中的问题,但我对仅出于技术原因而使用默认值的想法不太满意。

最后,我解决了我的问题,只需将@RequestBody注释添加到控制器的方法参数:我的方法现在看起来像

fun newTransaction(@RequestBody input: NewTxRequest)

NewTxRequest的定义如下

data class NewTxRequest(val from: String, val to: String, val amount: BigDecimal)

而且连载效果很好。。。我希望这也能帮助你!

 类似资料:
  • 我使用新的数据绑定库在Java编写了以下片段类 它的编译和运行都很好。 我尝试用Kotlin重写它,并得出以下结论: 但现在步骤输出以下内容: 错误:(16,38)未解析引用:DataBinding 错误:(37,27)未解析引用:FragmentDataBinding 我如何使用android-databinding库与Kotlin? 我的顶级: 应用程序目录中的我的(仅相关部分): 我使用的是

  • 数据绑定 JXML 中的动态数据来自于该 Page 的 data字段。 简单绑定 数据绑定使用 Mustache 语法(双大括号)将变量包起来,可以作用于以下: 页面内容 <view> hello {{ name }} </view> Page({ data: { name: 'cortana' } }) 组件属性(需要在双引号之内) <view id="{{id}}"> </

  • 我已经通过。但是,我注意到Reshuffle()没有出现在发行版中。这是否意味着我将不能在任何数据流管道中使用?有什么办法可以绕过这个吗?或者pip包可能只是不是最新的,如果Reshuffle()在github的master中,那么它将在Dataflow上可用? 根据对这个问题的回答,我试图从BigQuery中读取数据,然后在将数据写入GCP存储桶中的CSV中之前对数据进行随机化。我注意到,我用来

  • 更新:带有XYPlot的JPanel封装在JSplitPanel中。当我移动分隔符(用XYPlot放大JPanel)时,有两个XYPlot,第一个(在第一次单击时获得,第二个(如果第二次单击到另一个行/dataset->XYPlot)。

  • 问题内容: 我正在进行的一个项目在不久的将来可能会跨越几百万行,所以我正在研究我使用的数据库,因为这肯定会证明是一个问题。据我所读,一旦涉及到表的2,000,000行问题,SQL的所有形式都会出现问题。对于这些大型项目,有没有推荐好的数据库? 我正在谈论的是一个网站,归档旧条目并不理想,但是如果证明这是我无法克服的问题,则可以这样做。 谢谢。 问题答案: 我已经在MS SQL Server中使用了

  • 本文向大家介绍Android RecyclerView适配器中的数据绑定,包括了Android RecyclerView适配器中的数据绑定的使用技巧和注意事项,需要的朋友参考一下 示例 也可以在RecyclerView适配器中使用数据绑定。 资料模型 XML布局 转接器类别