Как вы делаете, Spring ожидает, что ваш JSON будет выглядеть примерно так:
{
"comment": "Foo bar",
"projectId": {
"id": 123,
..other properties..
},
"user": {
"id": 1
..other properties..
},
"parentCommentId": {
"id": 456
..other properties..
},
"childComments": [
{
"id": 789
..other properties..
}
]
}
С другой стороны, вы вставляете так:
{
"comment": "third comment",
"userId": 2,
"projectId" : 3,
"parentCommentId" : 2
}
Вы четко определяете RegisteredUser
, Project
и Comment
. Spring на самом деле не знает, что свойство userId
в вашем JSON относится к объекту RegisteredUser
.
Я пробовал это
{
"comment": "third comment",
"userId": 2,
"projectId" : 3,
"parentCommentId" : 2
}
, которые вставляют данные, но возвращаютuserId, projectId и parentCommentId равны нулю.
Почему это происходит? Ваш класс Comment
не определяет свойства userId
, projectId
, parentCommentId
.
Это ожидаемое поведение десериализатора. Если вы не хотите создавать объект вручную (т. Е. С помощью DTO), вы должны указать десериализатору создать экземпляр RegisteredUser
, Project
и Comment
(для parentComment).
Для этого вам просто нужно создать объект в вашем JSON.
Вместо этого:
{
"comment": "third comment",
"userId": 2,
"projectId" : 3,
"parentCommentId" : 2
}
Попробуйте это
{
"comment": "Foo bar",
"projectId": {
"projectId": 3
},
"user": {
"userId": 1
},
"parentCommentId": {
"commentId": 2
}
}
Это работает,но гораздо более многословно, чем то, как вы пытаетесь вставить. Это одна из причин, по которой я всегда использую DTO для объектов запроса / ответа.