Spring JDBC-带Kotlin的BeanPropertyRowMapper
概述: 该应用程序处理用户信息的基本CRUD功能 问题: 在从预填充的H2数据库读取用户详细信息时,我在使用Spring JDBC-带Kotlin的BeanPropertyRowMapper,kotlin,spring-jdbc,Kotlin,Spring Jdbc,概述: 该应用程序处理用户信息的基本CRUD功能 问题: 在从预填充的H2数据库读取用户详细信息时,我在使用BeanPropertyRowMapper时遇到了问题。 映射程序无法初始化用户实例,因为它无法使用数据类的默认构造函数 数据类: 存储库: 错误: 原因:java.lang.IllegalArgumentException:未为所需参数提供参数:参数#0乐趣id(kotlin.String、kotlin.String、kotlin.String、kotlin.String、java.
BeanPropertyRowMapper
时遇到了问题。
映射程序无法初始化用户实例,因为它无法使用数据类的默认构造函数
数据类:
存储库:
错误:
原因:java.lang.IllegalArgumentException:未为所需参数提供参数:参数#0乐趣id(kotlin.String、kotlin.String、kotlin.String、kotlin.String、java.util.Date):org.chrysalis.userservice.model.User
提供一个特定的行映射器解决了这个问题,但我不明白为什么BeanPropertyRowMapper
不能创建响应
我还想知道这个问题是否只针对Java反射,对于spring中的其他映射实用程序是否也是如此。随着SpringFramework 5.3的更新,SpringBoot 2.4
DataClassRowMapper现在支持通过构造函数调用映射
我认为代码> KROMMAPPER <代码>在功能方面有优势,但是如果您不感到使用外部库的痛苦,我建议使用<代码> DATAcLasReWaveMeP< <代码> >
以下是一个古老的答案
基本上,其他工具也会发生同样的情况
Java反射工具使用无参数构造函数初始化实例,然后使用setter初始化字段。
另一方面,Kotlin的数据类没有arg构造函数和setter(您可以通过反编译来确认这一点)
因此,您需要将字段定义为var,并准备无参数构造函数或使用Kotlin无参数插件(这会破坏空安全性)
我也遇到了同样的问题,所以我创建了一个基于Kotlin反射的工具。
如果你喜欢,请用它。
Caused by: java.lang.IllegalArgumentException: No argument provided for a required parameter: parameter #0 id of fun <init>(kotlin.String, kotlin.String, kotlin.String, kotlin.String, java.util.Date): org.chrysalis.userservice.model.User