Spring JDB C - BeanPropertyRowMapper с Kotlin - PullRequest
0 голосов
/ 12 июля 2020

Обзор: Приложение имеет дело с базовыми c функциями CRUD для информации о пользователе.

Проблема: При чтении сведений о пользователе из предварительно заполненной базы данных H2 я столкнулся с проблемами при использовании BeanPropertyRowMapper. Сопоставитель не может инициализировать экземпляр пользователя, так как он не может использовать конструктор по умолчанию для класса данных.

Класс данных:

enter image description here

Repository:

enter image description here

Error:

Caused by: java.lang.IllegalArgumentException: No argument provided for a required parameter: parameter #0 id of fun (kotlin.String, kotlin.String, kotlin.String, kotlin.String, java.util.Date): org.chrysalis.userservice.model.User

Providing a specific rowmapper solves the issue, but I am confused why BeanPropertyRowMapper is not able to create the response.

введите описание изображения здесь Мне также интересно, связана ли эта проблема только с c с отражением Java и будет ли это то же самое для других утилит сопоставления весной.

1 Ответ

0 голосов
/ 04 сентября 2020

По сути, то же самое происходит с другими инструментами.

Инструменты отражения Java инициализируют экземпляр конструктором без аргументов, а затем установщиком для инициализации поля. С другой стороны, класс данных Kotlin не имеет конструктора без аргументов и установщика (вы можете подтвердить это декомпиляцией).

Итак, вам нужно определить поле как var и подготовить no -arg или используйте плагин Kotlin no-arg (который нарушает нулевую безопасность).

У меня тоже были проблемы с той же ситуацией, поэтому я создал инструмент, основанный на отражении Kotlin. Пожалуйста, используйте его, если хотите. https://github.com/ProjectMapK/KRowMapper

...