我已经很快设法通过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
答案 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
或其各种变体,它就不起作用。
就这样。