#hibernate #spring-boot #spring-data-jpa #many-to-many
#переход в спящий режим #весенняя загрузка #spring-data-jpa #многие ко многим
Вопрос:
Я пытаюсь выполнить запрос PUT через curl. В полезной нагрузке, которую я отправляю через curl, у меня есть вложенный объект, который я хочу, чтобы Spring считывал как объект. Но, когда я отправляю полезную нагрузку через контроллер и после того, как @RequestBody считывает полезную нагрузку, Spring не может преобразовать этот вложенный объект в желаемый объект. (Spring возвращает значение null)
Это моя команда curl (сокращенная):
curl -X PUT ... --data "{
...
"playlistValue":{
"1":{
"filename":"test.mp4",
"id":"2"},
"2":{
"filename":"test2.mp4",
"id":"1"}}}"
Объект, который является значением «playlistValue», является другим объектом, который существует в Spring. Этим объектом является видео. Объект, к которому я отправляю запрос PUT, — это плейлист.
@Entity
public class Playlist {
private @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="playlist_id")
long id;
@ManyToMany
@JoinTable(name="playlist_values",
joinColumns=@JoinColumn(name="playlist_id"),
inverseJoinColumns= @JoinColumn(name="video_id"))
private Map<Integer, Video> playlistValue;
}
@Entity
public class Video {
private @GeneratedValue @Id @Column(name="video_id") Long id;
private @ManyToMany(mappedBy= "playlistValue") Set<Playlist> playlists;
}
Я хочу, чтобы Spring мог конвертировать вложенный объект, который я отправляю через полезную нагрузку в curl, в другой объект, Video. Если есть другой способ выполнить запрос PUT, то как?
Ответ №1:
Я смог сделать свой запрос PUT, поместив это в контроллер:
@RequestBody Map<Integer,Video> newPlaylist...
Вместо этого:
@RequestBody Playlist ...
Spring смог преобразовать видео на карте в объект Video, и, таким образом, я смог выполнить свой запрос PUT, используя @PathVariable для поиска идентификатора моего плейлиста, его настройки и последующего сохранения.
Комментарии:
1. Может быть, это потому, что значение playListValue вложено в другой объект? Я просто предполагаю, но я думаю, что создание запроса с не вложенным корневым объектом заставит его работать