RESTE - la restitution d'un Objet Créé avec Spring MVC
J'ai un RESTE d'appel qui accepte un objet JSON, disons, une personne. Après j'ai créer cette objet (validées et enregistrées dans la base de données), j'ai besoin de retourner le nouvellement créé Objet JSON.
Je pense que la norme est de retour 201 Accepted
au lieu de retourner l'objet immédiatement. Mais mon application a besoin de l'objet nouvellement créé immédiatement.
J'ai un contrôleur de méthodes qui prend un POSTE d'appel, les appels à une classe de service, qui appelle à son tour un DAO qui utilise Hibernate pour créer l'objet. Une fois qu'il est enregistré dans la base de données, je vais appeler un autre contrôleur de méthode qui prend l'ID de la personne et renvoie l'Objet.
Ma question, est-ce la meilleure approche? C'est l'appel d'une autre méthode de Contrôleur pour obtenir l'objet nouvellement créé. Ou le POST d'appel lui-même devez retourner l'Objet.
La question principale est:
L'appel d'une autre méthode consiste à prendre un aller-retour et je suppose que c'est inutile. (Service->DAO->Hibernate->Base de données). Au lieu de cela je pense que je devrais obtenir l'Objet à partir de la base de données immédiatement après il est enregistré dans le même appel (à partir de la méthode qui s'occupait de la POSTE).
Qu'est-ce que l'architecture standard ici?
OriginalL'auteur Kevin Rave | 2013-04-21
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
ResponseEntity
qui renvoie HTTP statut avec l'objet dont vous avez besoin.Exemple de code est (c'était mon code où je suis déjà Client de l'objet, de le modifier selon vos besoins) :
Lire ce la documentation pour en savoir plus. Un exemple de code a été fourni.
Ceci est un exemple de code, pour votre compréhension. Je voulais juste vous expliquer comment vous pouvez retourner un objet le long d'avec l'état http. Si vous utilisez le mode veille prolongée, vous pouvez obtenir un objet persisté à laquelle vous pouvez revenir immédiatement avec Http (201).
OriginalL'auteur Jeevan Patil
De la Spécification HTTP POST:
Ce que vous en sera de retour dans le corps de la réponse dépendra de la façon d'interpréter strictement
an entity which describes the status of the request and refers to the new resource
- et de nombreuses implémentations de simplement retourner une représentation de l'entité nouvellement créée lui-même. La chose la plus importante est de définir laLocation
tête dans la réponse à l'URI de la ressource nouvellement créée, de sorte que les clients peuvent immédiatement le chercher, s'ils le désirent.Avez-vous lu ma réponse? Ou êtes-vous demandez comment spécifiquement pour le retour d'une entité à partir d'un POSTE au Printemps?
Oui, cela répond à la première partie. "Ce qui devrait être renvoyé". Mais l'autre partie de la question est "quelle est la norme de/la meilleure façon de retourner l'objet lui-même dans le corps de la réponse". Pas dans l'emplacement d'en-tête. Je comprends et accepte que je devrais retourner
201 Created
et puis l'emplacement/l'URI de la ressource dans l'en-tête. Mais notre exigence est de retour le réel de l'objet JSON dans le corps lui-même. Pouvez-vous s'il vous plaît laissez-moi savoir?and many implementations simply return a representation of the newly created entity itself
- aka, il suffit de retourner l'entité directement à partir de votre poste de méthode, ou de l'envelopper dans un objet de résultat et de le retourner.OriginalL'auteur Perception
Vous pouvez retourner l'entité objet juste après conservation à l'aide de @ResponseBody, après @ResponseStatus, mais il n'est pas standard, de sorte que votre client doivent être conscients de cette personnalisation, sinon, si votre client dépend de la norme Api que vous avez à collé à la norme en retournant void.
OriginalL'auteur Bassem Reda Zohdy