Senden komplexe json-Objekt zu Spring MVC-controller
Ich versuche zu senden, ein Komplexes Objekt zu ajax controller für spring mvc-Suchmaschine, mit 3 Variablen: die aktuelle Seite, Einträge pro Seite und die such-Parameter. Das problem ist, dass mit der Erklärung der controller-Methode-nicht nehmen, mir die params-variable als eine Karte.
Als ich senden kann, die Struktur zu erfassen, auf die controller-3 Variablen getrennt?
Fehler:
Erforderlichen parameter zuweisen 'params' vorhanden ist
var dataToSend = {
'page': 1,
'itemsPerPage': 10,
'params': {
'codItem': "10",
'nameItem': "foo"
}
};
$.ajax({
url: form.attr("action"),
type: 'POST',
data: JSON.stringify(dataToSend),
dataType: 'json',
cache: false
}).success(function(data) {
callback(data);
});
public @ResponseBody HashMap<String, Object> search(@RequestParam(value="params") Map<String, String> params, @RequestParam(value = "page") int page, @RequestParam(value = "itemsPerPage") int itemsPerPage){
};
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um dies richtig tun, müssen Sie die Nutzung der JSON-Bibliothek. Frühling, gebündelt mit Jackson.
Zuerst müssen Sie zum erstellen von Klassen zur Darstellung Ihres JSON.
Müssen Sie ändern $.ajax Daten senden, wie das { data : JSON.stringify(dataToSend)}, denn parameter müssen einen Namen.
In einer controller-Methode schreiben diese:
Wenn Sie getter für MyJson params-Feld können Sie die Iteration über json.getParams() gekennzeichnet.
Könnte man einfach Spritzen die
HttpServletRequest
in den Controller-Methode und Lesen Sie die Körper sich wie unten gezeigt :Ausgabe :
{"page":1,"itemsPerPage":10,"params":{"codItem":"10","nameItem":"foo"}}
Lesen Sie diese Attribute durch die Umwandlung dieser string in JSON-Objekt mit JSON-API-sunch wie GSON. Oder erstellen POJO, die alle Ihre Attribute definieren Sie im JSON-Format und konvertieren Sie Ihre Json-strig direkt zu POJO-Objekt.
Beispielcode :
Kann dies helfen.
Habe ich das problem gelöst wie folgt:
Das problem ist, dass es funktioniert für die Struktur des Beispiel, wenn ich versuche, mich zu Holen, den form-Parameter, sendet mich nicht als json:
Ergebnis:
Und serializeArray():
itemsPerPage 5
Seite 1
Als ich senden kann es in der Struktur der dataToSend? der einzige Weg ist, um durch die Parameter?
Meiner Umgebung:
AngularJs, SpringMVC, Gson jsonobject
In der Regel, wenn ich ein Komplexes json-Objekt aus dem font-end zu back-end, ich werde tun, eine generische Art und Weise, wie unten zu behandeln.
erste:
ich benutze angularJs zu unterbreiten, die eine formatierte json-Strings, ich glaube, mit jquery ajax werden die gleichen sein, nur brauchen, um sicher zu sein, dass Daten, die von u gesendeten json-formatierten string.
https://docs.angularjs.org/api/ng/function/angular.toJson
zweite:
u beobachten können, die json-Inhalte übergeben mvc-controller, und controller u verwenden können, Gson zu konvertieren und zu json-Objekt.