2009-09-06 5 views
1

Je suis assez sûr que cela doit être dans les docs quelque part, mais j'ai cherché des jours et ne l'ai pas repéré. Je suis probablement moi-même les yeux fixés aveugle quand il est juste en face de moi, désolé d'avoir posé une question abvious, mais ....Printemps 3.0M4 et le passage des objets en tant que paramètres à POST

@RequestMapping(method = RequestMethod.POST) 
public ModelAndView post(@ModelAttribute("user") User user) { 
    ModelAndView mav = new ModelAndView(jsonView); 
    //.... 
    return mav; 
} 

C'est ma fonction POST dans le cadre de mon contrôleur, et je aime l'essayer. . Alors je lance l'affiche, le testeur Firefox REST que j'utilise pour essayer mes fonctions, et le feu POST à ​​http://localhost:8000/userController avec des paramètres {prenom = « toto », lastname = « bar} Cela me donne:

org.springframework.web.HttpSessionRequiredException: Session attribute 'user' required - not found in session 

J'essaye donc avec {user.firstname = "foo", user.lastname = "bar"}, même erreur Quels paramètres dois-je envoyer dans une requête POST ou PUT pour utiliser ce mécanisme qui mappe automatiquement mes paramètres à un objet?

Vive

Nik 

Répondre

1

Cet effet se produit apparemment si vous avez annoté @SessionAttributes dans votre classe. Spring s'attend à ce que l'attribut model soit stocké dans la session à partir d'une requête Web GET précédente, qui a placé l'objet dans le modèle.

Ce comportement permet une liaison partielle des paramètres de requête aux objets de modèle. Le flux de travail est la suivante:

  1. vous recevez une GET demande pour remplir le modèle
  2. Spring lie tous les modèles objets configurés soit par nom ou par type dans @SessionAttributes à la session
  3. vous recevez une demande POST avec les données mises à jour
  4. Spring prend les objets de la session et se fixe les données de demande les

Othwerise Spring peuplerait un nouvel objet vide qui n'est généralement pas le comportement souhaité.

+0

Aha! :-) Cela a du sens, donc j'avais mal compris cette partie et supposé que Spring mappait les valeurs à l'objet demandé pour que cela puisse être instancié ou demandé. Cela facilite les processus "d'assistant" – niklassaers

1

Cette annotation w recherche mal à la session un attribut nommé « utilisateur », alors que les paramètres que vous envoyez dans le POST sont stockés en tant que paramètres de la demande:

//Get a session attribute: 
request.getSession().getAttribute("user"); 

//Get a request parameter: 
request.getParameter("firstname"); 

More here

+0

À droite, ce que je demande c'est: comment définir cet attribut utilisateur dans ma requête REST? Ou est-ce que 'utilisateur' ne vit que sur la session côté serveur? – niklassaers

0

Aucune annotation ne devrait être nécessaire sur le paramètre de la méthode User , Spring le reconnaîtra comme un objet de commande et liera à lui sans l'annotation.

@ModelAttribute est légèrement confuse, je trouve, sa signification semble varier d'une situation à l'autre.

Questions connexes