Ich verwende jQuery's $.getJSON()
, um asynchrone Aufrufe an mein einfaches Spring MVC-Backend zu tätigen. Die meisten Spring-Controller-Methoden sehen folgendermaßen aus:
@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
@RequestParam("type") String type) {
return someDAO.getSomeData(widget, type);
}
Ich habe Dinge so eingerichtet, dass jeder Controller das @ResponseBody
als JSON zurückgibt , was die Clientseite erwartet.
Aber was passiert, wenn eine Anfrage keinen Inhalt an den Client zurückgeben soll? Kann ich haben:
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
...
}
Wenn nicht, welche Syntax ist hier zu verwenden?
java
jquery
spring-mvc
IAmYourFaja
quelle
quelle
POST
Daten.Antworten:
Sie können void zurückgeben, dann müssen Sie die Methode mit @ResponseStatus (value = HttpStatus.OK) markieren. Sie benötigen @ResponseBody nicht
Nur Get-Methoden geben eine Implizität von 200 Statuscodes zurück. Alle anderen Methoden haben eines von drei Dingen:
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
HttpEntity
Instanz zurückquelle
@ResponseStatus
und sollten nicht. Es ist schon gut genug ,@ResponseBody
einenvoid
Handler zu haben.Sie können einfach eine ResponseEntity mit dem entsprechenden Header zurückgeben:
quelle
ResponseEntity is a raw type. References to generic type ResponseEntity<T> should be parameterized
Sie können das Objekt "ResponseEntity" zurückgeben. Die Verwendung des Objekts "ResponseEntity" ist sowohl zum Zeitpunkt der Erstellung des Antwortobjekts (das den Antworttext und den HTTP-Statuscode enthält) als auch zum Zeitpunkt des Abrufs von Informationen aus dem Antwortobjekt sehr praktisch.
Methoden wie getHeaders (), getBody (), getContentType (), getStatusCode () usw. erleichtern das Lesen des ResponseEntity-Objekts.
Sie sollten das ResponseEntity-Objekt mit dem http-Statuscode 204 (No Content) verwenden. Dies soll insbesondere angeben, dass die Anforderung ordnungsgemäß verarbeitet wurde und der Antworttext absichtlich leer ist. Die Verwendung geeigneter Statuscodes zur Übermittlung der richtigen Informationen ist sehr wichtig, insbesondere wenn Sie eine API erstellen, die von mehreren Clientanwendungen verwendet werden soll.
quelle
@ResponseStatus(HttpStatus.NO_CONTENT)
gelöstXML Parsing Error: no root element found
Ja, Sie können @ResponseBody mit dem
void
Rückgabetyp verwenden:quelle
Es ist nichts Falsches daran, eine Leere zurückzugeben,
@ResponseBody
und Sie sollten dafürPOST
Anfragen .Verwenden Sie stattdessen HTTP-Statuscodes, um Fehler in Ausnahmehandlerroutinen zu definieren, da andere den Erfolgsstatus erwähnen. Eine normale Methode, wie Sie sie haben, gibt einen Antwortcode zurück, von
200
dem Sie möchten. Jeder Ausnahmebehandler kann dann ein Fehlerobjekt und einen anderen Code (dh500
) zurückgeben.quelle
Aber wenn Ihr System an Größe und Funktionalität zunimmt, denke ich, dass es überhaupt keine schlechte Idee ist, immer einen JSON zurückzugeben. Ist eher eine architektonische / "groß angelegte Design" Angelegenheit.
Sie können daran denken, immer einen JSON mit zwei bekannten Feldern zu speichern: Code und Daten. Wobei Code ein numerischer Code ist, der den Erfolg der auszuführenden Operation angibt, und Daten alle zusätzlichen Daten sind, die sich auf die angeforderte Operation / den angeforderten Dienst beziehen.
Komm schon, wenn wir ein Backend eines Dienstanbieters verwenden, kann jeder Dienst überprüft werden, um festzustellen, ob er gut funktioniert hat.
Ich halte mich also daran, dass Spring dies nicht verwaltet und hybride Rückgabevorgänge verfügbar macht (einige geben Daten zurück, andere nichts ...). Stellen Sie sicher, dass Ihr Server eine homogenere Schnittstelle bereitstellt. Ist am Ende des Tages einfacher.
quelle
Hier ist Beispielcode, was ich für eine asynchrone Methode getan habe
Sie müssen nichts von Ihrer Methode zurückgeben, sondern nur diese Annotation verwenden, damit Ihre Methode in jedem Fall OK zurückgibt
quelle