Ich wollte in letzter Zeit keine Sitzung verwenden. Ich möchte ein sichereres und stabileres Way -Token erleben und eine einheitliche Schnittstelle für den Browser und die App schreiben. Also wechselte ich die Rezeption eines Trainingsprogramms in Ajax und sprang dann und benutzte SpringMVC, um die Weiterleitung zu steuern. Ich habe ein tieferes Verständnis für die Übertragung von JSON -Daten. Ich werde es teilen und bitte korrigieren Sie mich.
In SpringMVC können wir verschiedene Möglichkeiten auswählen, JSON zu akzeptieren. Bevor wir darüber sprechen, wie SpringMVC JSON akzeptiert, sprechen wir darüber, was JSON ist. Ich werde die spezifische Definition nicht näher erläutern. In JavaScript definieren wir häufig JSON -Objekte auf diese Weise.
var jsonObject = {"Benutzername": "admin", "Passwort": 123}In diesem Formular nennen wir es JSON -Objekt, und es gibt auch ein Konzept namens JSON String. Wie der Name schon sagt, ein Ganzes von '' oder "", nennen wir es eine Zeichenfolge. Wir wissen, dass Zeichenfolgen direkt ausgegeben werden können, Objekte können jedoch nicht direkt ausgegeben werden. In JavaScript können wir also
// ein Objekt definieren jSONObjectVar jsonObject = {"Benutzername": "admin", "Passwort": 123}; alert (jsonObject);Zu diesem Zeitpunkt wird [Objektobjekt] angezeigt, ohne den Inhalt des JSON -Objekts auszugeben. JavaScript bietet uns zwei Tools
JSON.PARSE () wird verwendet, um eine JSON -String in ein JavaScript -Objekt umzuwandeln. JSON.Stringify () wird verwendet, um JavaScript -Werte in JSON -Zeichenfolgen umzuwandeln.
Also, wenn wir tippen
Alert (json.Stringify (jsonObject));
{"Benutzername": "admin", "Passwort": 123} wird angezeigt;
* Okay, das ist alles für die Erklärung von JSON. Sprechen wir über SpringMVC *
Welches haben wir den Wert durch AJAX an SpringMVC übergeben, da JSON die oben genannten zwei Arten der Existenz hat?
Wir versuchen zuerst, das JSON -Objekt direkt zu senden
// JSON -Objekt var userername = $ ("#userername"). Val (); var password = $ ("#password"). val (); var json = { "username" : username, "password" : password };// Jquery Ajax request $.ajax({ url : "jsontest", type : "POST", async : true, data : json, dataType : 'json', success : function(data) { if (data.userstatus === "success") { $("#errorMsg").remove(); } else {if ($ ("#errormsg"). Länge <= 0) {$ ("Form [name = loginform]"). Anhang (errormsg);Denken wir zunächst darüber nach, was SpringMVC uns bietet. Es gibt eine Annotation von @RequestParam. Für diese Annotation ist seine Funktion im Grunde die gleiche wie die Anfrage. GETPARAMETER IN UNSEREM SERVLET. Wir verwenden diese Annotation zuerst, um sie zu bekommen
@RequestMapping ("/jsontest") public void test (@RequestParam (value = "username", fordert = true) String -Benutzername, @RequestParam (value = "password", fordert = true) String Passwort) {System.out.println ("username:" + userername); System.out.println ("Passwort:" + Passwort); }Unsere Parameter erfolgreich aus dem Hintergrund wurden erfolgreich akzeptiert!
SpringMVC ist so schlau, wenn wir die @RequestParam -Annotation entfernen, was wird dann passieren, wenn wir zwei Werte direkt einfügen?
@RequestMapping ("/jsontest") public void test (String -Benutzername, String -Passwort) {System.out.println ("Benutzername:" + Benutzername); System.out.println ("Passwort:" + Passwort); }Es war tatsächlich erfolgreich. Ich werde das Prinzip hier nicht näher erläutern. Interessierte Freunde können den Punkt brechen und einen Blick darauf werfen.
SpringMVC bietet einen @RequestBody, mit dem die vom Vordergrunddefinition inhaltlich gesendeten Daten verarbeitet werden: nicht die Anwendung/x-www-form-urlenkodierte Codierung wie Anwendung/JSON, Anwendung/XML usw.;
Sorgfältige Freunde haben möglicherweise festgestellt, dass wir im vorherigen AJAX den Typ des Inhaltstyps nicht definiert haben, und JQuery verwendet standardmäßig die Anwendung/X-WWW-Form-Formen-Typ. Das bedeutet, dass SpringMVCs @RequestParam -Annotation und Servlet's Request.GetParameter JSON -Objekte akzeptieren können, die in diesem Format übertragen werden.
Warum! ? Ich glaube, jeder ist mit Get Anfragen vertraut. Es sendet Parameter in Form von URL? Userername = ”admin” & password = 123 und request.getParameter kann diesen Parameter empfangen. Wir können dies auch in der Browser -Adressleiste sehen. Wie können wir ihn im Hintergrund in Ajax verwenden und ein JSON -Objekt senden? Die Antwort liegt in der Codierungsmethode von X-WWW-Form-Form-Convertings-JSON-Daten in eine Zeichenfolge (username = ”” ”& password = 123) und fügt diese Zeichenfolge in die URL hinzu und verwendet? Segmentierung (ist sie der GET -Methode sehr ähnlich). Wenn die Einreichungsmethode nach Post ist, verkauft der Browser die Daten in HTTP -Körper und sendet sie dann an den Server. Es wird also nicht auf der URL angezeigt. (Dieser Absatz ist möglicherweise eine kleine Wendung, ich hoffe, jeder kann es sorgfältig verstehen.)
Endlich mit dem Sprechen einatmete und seufzte. Wenn wir also die @RequestBody-Annotation verwenden, muss der inhaltliche Typ der Rezeption in Anwendung/JSON geändert werden. Wenn es keine Änderung gibt, meldet die Rezeption einen Fehler von 415 (nicht unterstützter Medienart). Das Hintergrundprotokoll meldet einen Fehlerinhaltstyp 'Anwendung/x-www-form-rencoded; charset = utf-8' nicht unterstützt. Diese Fehler werden in Tomcat unter Sonnenfinsternis nicht angezeigt. Es wird nur angezeigt, wenn das Protokoll verwendet wird. Sie können meinen vorherigen Artikel zum Konfigurieren des Protokolls lesen. Konfigurieren wir als nächstes korrekt. In dem oben genannten Inhaltsarten muss geändert werden, und unsere Daten müssen ebenfalls geändert werden. Diese Annotationsmethode akzeptiert nur JSON -Zeichenfolgen anstelle von JSON -Objekten.
$.ajax({ url : "jsontest", type : "POST", async : true, contentType : "application/json", data : JSON.stringify(json), dataType : 'json', success : function(data) { if (data.userstatus === "success") { $("#errorMsg").remove(); } else { if ($ ("#errormsg"). Länge <= 0) {$ ("Form [name = loginForm]"). Anhang (errormsg);Der Hintergrund ändert sich auch. JSON kann tatsächlich als Schlüsselwertpaar verstanden werden, daher verwenden wir MAP, um sie zu empfangen und dann die Zeichenfolge oder andere Datentypen weiter zu verarbeiten.
@RequestMapping ("/jsontest") public void test (@RequestBody (fordert = true) map <String, Objekt> map) {String username = map.get ("Benutzername"). ToString (); String password = map.get ("password"). ToString (); System.out.println ("Benutzername:" + Benutzername); System.out.println ("Passwort:" + Passwort); }Gleichzeitig erinnerte ich mich wieder an das magische SpringMVC, also beschloss ich, die Annotation zu entfernen und es zu versuchen. Ok, ich war entschlossen mit einem Nullzeigerfehler explodiert ... ich habe versucht, es zu stoppen.
SpringMVC bietet auch eine Methode zur direkten Bindung von Parametern an Pojo. Die Rezeption ist die gleiche, also werde ich sie nicht posten.
@RequestMapping ("/jsontest") public void test (@RequestBody -Benutzer) {String username = user.getUnername (); String password = user.getPassword (); System.out.println ("Benutzername:" + Benutzername); System.out.println ("Passwort:" + Passwort); }OK, diesmal können Sie den Wert erhalten. Ich persönlich mag diese Methode nicht zum Hochladen kleiner Datenvolumina wie Anmeldung. Es gibt viele Variablen im Benutzer. Ich habe nur zwei von ihnen benutzt. Es ist nicht erforderlich, ein Benutzerobjekt zu erstellen. Wenn das Datenvolumen klein ist, bevorzuge ich im Allgemeinen immer noch separate Werte, um es zu erhalten. Lassen Sie uns noch einmal darüber nachdenken, wenn wir JSON -Objekte hochladen, können wir POJO binden? Die Antwort lautet ja. Verwenden Sie nicht die @RequestParam -Annotation, ansonsten ist der erforderliche Benutzerparameter 'Benutzer' kein vorhandener Fehler. Die Erklärung ist hier im Grunde genommen hier. Lassen Sie uns sie unten zusammenfassen.
Wir sprechen zuerst über JSON -Objekte und JSON -Strings
Wenn SpringMVC dann zwei oder zwei JSON-Formate akzeptiert, die Front-End-ContentType-Einstellung und ob das Back-End-Anmerkungen verwendet, um sie zu akzeptieren, erwähnte es auch ein kleines Servlet.
Wenn AJAX in Anwendungen/x-www-form-urlencoded-Format hochgeladen wird, müssen @RequestParam oder Servlet verwendet werden, um es im Hintergrund zu erhalten. Wenn AJAX im Anwendung/JSON -Format hochgeladen wird, wird es zur Verwendung von JSON -Zeichenfolgen verwendet. Der Hintergrund muss @rquestBody verwenden, um es zu erhalten.
Dies sind eine Zusammenfassung meiner Experimente für einen Tag. Ich hoffe es kann dir helfen. Wenn es Fehler gibt, vergib mir bitte und korrigieren Sie mich.
Die obige detaillierte Erläuterung der von SpringMVC akzeptierten JSON -Parameter und der Zusammenfassung gemeinsamer Fehler ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.