REST POST一次创建多个域对象?

时间:2011-02-10 20:15:51

标签: rest grails

我已经很快设法通过REST POST创建了域类,但我仍然坚持如何为具有相同类型的多个对象的xml文件创建多个创建,例如我成功的地方

<Track>
       <trackAlbumName> Songs for Polar Bears </trackAlbumName>
       <trackArtistName> Snow PAtrol </trackArtistName>
       <trackSongTitle> First Song </trackSongTitle>
</Track>

我添加了一个UploadTrackGroup域类,现在希望在同一个上传中创建多个Track对象,例如我希望发布类似的东西;

<?xml version="1.0" encoding="utf-8"?>

<UploadTrackGroup>

    <Track>
       <trackAlbumName> Songs for Polar Bears </trackAlbumName>
       <trackArtistName> Snow PAtrol </trackArtistName>
       <trackSongTitle> First Song </trackSongTitle>
    </Track>

    <Track>
       <trackAlbumName> Different Class </trackAlbumName>
       <trackArtistName> Pulp </trackArtistName>
       <trackSongTitle> Misshapes </trackSongTitle>
    </Track>

    <Track>
       <trackAlbumName> F Sharp A Sharp </trackAlbumName>
       <trackArtistName> Godspeed You Black Emperor </trackArtistName>
       <trackSongTitle> Dead Flag BLues</trackSongTitle>
    </Track>

</UploadTrackGroup>

但如果能让它发挥作用,我会被诅咒。

当我尝试在控制器中使用以下代码时;

println params

params.UploadTrackGroup.each {
    println "-->" + it
}

我只看到一首曲目,例如

[action:create, controller:recognisedSong, UploadTrackGroup:[Track: F Sharp A Sharp  Godspeed You Black Emperor  Dead Flag BLues]]

-->Track= F Sharp A Sharp  Godspeed You Black Emperor  Dead Flag BLues

2 个答案:

答案 0 :(得分:0)

试试这个:

def xml = request.XML
int tracksSize = xml.UploadTrackGroup[0].Track.size()
if (trackSize > 0) {
  def trackGroupXml = xml.UploadTrackGroup[0]
  for (int i = 0; i < tracksSize; ++i) {
    def albumName= x.Track[i].trackAlbumName.text()
    //Get other props out of XML, create domain object
  }
}

您可能还想使用“RestController”命名控制器。请参阅this about controllers

答案 1 :(得分:0)

通过有效地忽略父UploadTrackGroup节点并简单地使用

,我成功地实现了我想要的目标
 request.XML.Track.each { 
                  println it.trackAlbumName.text() + " " + it.trackArtistName.text()
              }

看来,只要我尝试指定Track节点的确切限定路径,即UploadTrackGroup.Track.each或其各种变体,它就不起作用。

就这样。