2011-02-10 4 views
0

J'ai rapidement réussi à créer des classes de domaine via un POST REST, mais je suis bloqué sur la façon de créer plusieurs créations pour un fichier xml avec plusieurs objets du même type, par exempleREST POST créer plusieurs objets de domaine à la fois?

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

J'ai ajouté une classe de domaine UploadTrackGroup, et je souhaite maintenant créer plusieurs objets de piste dans le même téléchargement, par exemple, j'espérais POST quelque chose comme;

<?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> 

Mais je serai damné si je peux le faire fonctionner.

Lorsque j'essaie d'utiliser le code suivant dans mon contrôleur;

println params 

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

Je ne vois qu'une seule piste, par exemple

[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

Où rencontrez-vous le problème? chez le client? sur le serveur? où. Détails ... – hvgotcodes

Répondre

0

J'a réussi à réaliser ce que je voulais en ignorant efficacement le noeud UploadTrackGroup parent, et simplement en utilisant

request.XML.Track.each { 
        println it.trackAlbumName.text() + " " + it.trackArtistName.text() 
       } 

Il semblerait que dès que je tente de spécifier le chemin qualifié exacte aux nœuds de piste, c'est-à-dire UploadTrackGroup.Track.each ou diverses variantes de celui-ci, cela ne fonctionne pas.

Alors ça va.

0

Essayez ceci:

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 
    } 
} 

Vous pouvez également nommer votre contrôleur avec "RestController". Voir this about controllers.

+0

Cela ne semble pas fonctionner. Ai-je besoin de créer un objet domaine UploadTrackGroup pour que cela fonctionne? Est-ce que le contenu de cette carte serait hasMany? – GrahamB

+0

Que faire si vous println request.xml? Voyez-vous tous les 3 de vos éléments? (les noms des éléments ne s'imprimeront pas, mais les valeurs sont là.) De plus, vous ne devriez pas avoir besoin d'un objet de domaine pour UploadTrackGroup. – Steve

Questions connexes