В моем приложении java spring, я работаю с спящим и jpa, и я использую jackson для заполнения данных в DB.Jackson: ссылается на объект как свойство
Вот класс User:
@Data
@Entity
public class User{
@Id
@GeneratedValue
Long id;
String username;
String password;
boolean activated;
public User(){}
}
и второй класс:
@Entity
@Data
public class Roles {
@Id
@GeneratedValue
Long id;
@OneToOne
User user;
String role;
public Roles(){}
}
В классе ролей у меня есть свойство пользователя , а затем я сделал файл JSon для хранения данных:
[ {"_class" : "com.example.domains.User", "id": 1, "username": "Admin", "password": "123Admin123","activated":true}
,
{"_class" : "com.example.domains.Roles", "id": 1,"user":1, "role": "Admin"}]
Unfortu сожалению, когда я запустить приложение он жалуется:
.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.example.domains.User: no int/Int-argument constructor/factory method to deserialize from Number value (1)
at [Source: N/A; line: -1, column: -1] (through reference chain: com.example.domains.Roles["user"])
Проблема возникает из
{"_class" : "com.example.domains.Roles", "id": 1,"user":1, "role": "Admin"}
и когда я удалить эту строку приложение работает хорошо.
Я думаю, он жалуется, потому что не может создать экземпляр пользователя. Итак, как я могу это исправить?
В нем говорится, что проблема в том, что проблема: он не может отобразить целое число 1 в поле, которое имеет тип «Пользователь». Вы должны либо иметь пользовательский объект вместо ссылки внешнего ключа во входе. ИЛИ сделайте то, что я предпочитаю, напишите DTO, содержащий интересующие вас поля, затем примените любую бизнес-логику, необходимую для того, чтобы заставить сущность работать. –
У меня не получилось. могли бы вы написать ответ? –
С точки зрения бизнеса, это один к одному правильный? –