L'action suivante :
def addMembers(){
Map result = [message:"successful"]
try {
def group = Group.get(params.id)
def json = request.JSON
def users = json.users.collect{Usr.get(it.id)}
result.members = groupService.addMembers(group,users)
}catch(Exception e){
message = "Exception $e"
result.message = message
response.setStatus(hsr.SC_METHOD_NOT_ALLOWED)
}
respond result, [model:[result:result]]
}//eo addMember
En conjonction avec le fichier addMembers.gson suivant
model {
Map result
}
json{
message result.message
members g.render(template:"simpleMember", collection: result.members, var:'member')
}
Obtient une exception de pointeur nul : java.lang.NullPointerException : Impossible d'obtenir la propriété 'message' sur un objet nul.
J'ai des choses qui fonctionnent bien dans d'autres actions où je réponds à des objets du domaine, mais le côté client a besoin d'un message si j'attrape une exception et il ne semblait vraiment pas utile de créer un pogo arbitraire quand [message :"",members :[]] pourrait faire la même quantité de travail qu'un fichier supplémentaire arbitraire et 5-10 lignes de code supplémentaires.
Mise à jour 1 J'ai essayé de remplacer Map par une classe ResultHolder arbitraire afin d'apaiser toute typologie stricte qui aurait pu être en jeu.
Cela n'a pas aidé
Mise à jour 2 Dans mon fichier .gson, j'ai remplacé
json{
avec
json g.render(result){
Et ça me donne une sortie nulle au lieu de pointeurs nuls.
Tout aussi inacceptable.
Mise à jour 3 Afin d'essayer d'évaluer comment interagir avec le modèle gson sans dépendre des messages ajax et de l'interaction avec la base de données, je fais l'action arbitraire suivante :
def jsonDbug(){
def result = [message:"hi"]
respond result, [model:[jsonDbug:result]]
}
et un fichier gson arbitraire :
model{
Map jsonDebug
}
json{
says jsonDebug.message
}
Cela me permet de faire des changements plus rapidement et de voir ce qui ne va pas. J'essaie d'appeler d'autres façons que de répondre maintenant, mais rien ne fonctionne.
C'est comme si les vues JSON étaient strictement réservées aux objets du domaine et rien d'autre.