J'utilise jQuery $.getJSON()
pour effectuer des appels asynchrones vers mon backend simple Spring MVC. La plupart des méthodes de contrôleur Spring ressemblent à ceci:
@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
@RequestParam("type") String type) {
return someDAO.getSomeData(widget, type);
}
J'ai configuré les choses pour que chaque contrôleur renvoie le @ResponseBody
JSON, ce que le client attend.
Mais que se passe-t-il lorsqu'une requête n'est pas censée renvoyer du contenu côté client? Puis-je avoir:
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
...
}
Sinon, quelle est la syntaxe appropriée à utiliser ici?
java
jquery
spring-mvc
IAmYourFaja
la source
la source
POST
données.Réponses:
vous pouvez renvoyer void, puis vous devez marquer la méthode avec @ResponseStatus (value = HttpStatus.OK) vous n'avez pas besoin de @ResponseBody
Seules les méthodes get renvoient une implicité de code d'état 200, toutes les autres que vous avez font l'une des trois choses suivantes:
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
HttpEntity
instancela source
@ResponseStatus
et ne devriez pas. Le simple fait d'avoir@ResponseBody
unvoid
gestionnaire est assez bien.Vous pouvez simplement renvoyer un ResponseEntity avec l'en-tête approprié:
la source
ResponseEntity is a raw type. References to generic type ResponseEntity<T> should be parameterized
Vous pouvez renvoyer l'objet "ResponseEntity". L'utilisation de l'objet "ResponseEntity" est très pratique à la fois au moment de la construction de l'objet de réponse (qui contient le corps de la réponse et le code d'état HTTP) et au moment de l'extraction des informations de l'objet de réponse.
Des méthodes telles que getHeaders (), getBody (), getContentType (), getStatusCode () etc. facilitent la lecture de l'objet ResponseEntity.
Vous devez utiliser un objet ResponseEntity avec un code d'état http de 204 (Aucun contenu), qui est spécifiquement pour spécifier que la demande a été traitée correctement et que le corps de la réponse est intentionnellement vide. Il est très important d'utiliser des codes d'état appropriés pour transmettre les bonnes informations, en particulier si vous créez une API qui sera utilisée par plusieurs applications clientes.
la source
@ResponseStatus(HttpStatus.NO_CONTENT)
résoluXML Parsing Error: no root element found
pour moi dans le navigateurOui, vous pouvez utiliser @ResponseBody avec le
void
type de retour:la source
Il n'y a rien de mal à renvoyer un vide
@ResponseBody
et vous devriez pour lesPOST
demandes.Utilisez plutôt les codes d'état HTTP pour définir les erreurs dans les routines du gestionnaire d'exceptions, car d'autres mentionnent l'état de réussite. Une méthode normale comme vous l'avez retournera un code de réponse
200
dont vous avez besoin, tout gestionnaire d'exceptions peut alors retourner un objet d'erreur et un code différent (ie500
).la source
Mais à mesure que votre système grandit en taille et en fonctionnalités ... je pense que retourner toujours un json n'est pas du tout une mauvaise idée. Est plus une question d'architecture / de «conception à grande échelle».
Vous pouvez penser à returing toujours un JSON avec deux champs connus: le code et les données. Où code est un code numérique spécifiant le succès de l'opération à effectuer et les données sont des données supplémentaires liées à l'opération / service demandé.
Allez, quand nous utilisons un backend un fournisseur de services, n'importe quel service peut être vérifié pour voir s'il a bien fonctionné.
Donc je m'en tiens, pour ne pas laisser le printemps gérer cela, exposant des opérations de retour hybrides (Certains retourne des données autre rien ...) .. instaed assurez-vous que votre serveur expose une interface plus homogène. C'est plus simple à la fin de la journée.
la source
Voici un exemple de code de ce que j'ai fait pour une méthode asynchrone
Vous n'avez pas besoin de renvoyer quoi que ce soit de votre méthode, tout ce dont vous avez besoin pour utiliser cette annotation pour que votre méthode renvoie OK dans tous les cas
la source