POST并将嵌套对象持久保存到Spring MVC

时间:2015-09-08 08:15:01

标签: java spring hibernate spring-mvc jackson

我发现了一个类似的问题here,并尝试修复它,但它仍无效。

使用: Hibernate,Spring MVC

我在实体旅行者地址之间存在 @ManyToMany 关系。

如果我通过自己的控制器单独创建旅行者地址,则可以。但是,如果我尝试通过以下控制器创建旅行者和相应的地址,则会收到400错误请求错误:

    @RequestMapping(value = "/travelers", method=RequestMethod.POST)
    public @ResponseBody Traveler createTraveler(@RequestBody Traveler traveler, Address address) {
    logger.info("Start createTraveler");
    System.out.println("Received traveler: " + traveler.getLastName());
    travelerDAO.save(traveler);
    System.out.println("Received address: " + address.getStreet());
    addressDAO.save(address);
    logger.info("End createTraveler");
    return traveler;
}

1 个答案:

答案 0 :(得分:1)

如果您的JSON有效负载是具有嵌套地址的旅行者对象,则spring应自动填充Traveler的地址集合(在Jackson的帮助下)。 试试没有地址参数。

// Other lists

else if (MEDIA_ID_MUSICS_BY_TITLE.equals(parentMediaId)) {
            LogHelper.d(TAG, "OnLoadChildren.TITLES");
            for (String title : mMusicProvider.getSongTitles()) {
                for (MediaMetadataCompat track : mMusicProvider.getMusicsBySongTitle(title)) {
                    String hierarchyAwareMediaID = MediaIDHelper.createMediaID(
                            track.getDescription().getMediaId(), MEDIA_ID_MUSICS_BY_TITLE, title);
                    MediaMetadataCompat trackCopy = new MediaMetadataCompat.Builder(track)
                            .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID)
                            .build();
                    MediaBrowserCompat.MediaItem bItem = new MediaBrowserCompat.MediaItem(
                            trackCopy.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
                    mediaItems.add(bItem);
                }
            }

        }
// More lists