@RequestBody не преобразует вложенный объект из полезной нагрузки в объект с переменной @ManyToMany

#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 вложено в другой объект? Я просто предполагаю, но я думаю, что создание запроса с не вложенным корневым объектом заставит его работать