Envoyer complexe d'objet json pour contrôleur Spring MVC
Je suis en train d'envoyer un objet complexe à l'ajax contrôleur spring mvc moteur de recherche, avec 3 variables: la page en cours, d'éléments par page et les paramètres de recherche. Le problème est que, avec la déclaration de la méthode de contrôleur ne pas me prendre la variable params comme une Carte.
Que je peux envoyer de la structure de recueillir sur le contrôleur de 3 variables séparément?
Erreur:
Carte de paramètre 'params' n'est pas présent
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){
};
Vous devez vous connecter pour publier un commentaire.
Pour ce faire correctement, vous devez utiliser JSON de la bibliothèque. Le printemps est livré avec Jackson.
Vous devez d'abord créer une classe pour représenter votre JSON.
Vous avez besoin de changer $.ajax, d'envoyer des données comme ceci { données : JSON.stringify(dataToSend)}, becouse paramètre besoin, un nom.
Dans votre méthode de contrôleur écrire ceci:
Si vous avez getter pour MyJson params domaine, vous pouvez effectuer une itération sur json.getParams() de la carte.
Il vous suffit d'injecter le
HttpServletRequest
dans votre méthode de Contrôleur et de lire le corps, vous-même, comme indiqué ci-dessous :De sortie :
{"page":1,"itemsPerPage":10,"params":{"codItem":"10","nameItem":"foo"}}
Vous pouvez lire ce que des attributs de convertir cette chaîne en un Objet JSON en utilisant des API JSON sunch comme GSON. Ou créer des POJO contenant tous les attributs définissent en JSON et de convertir vos Json strig directement à POJO objet.
Exemple De Code :
Cela peut vous aider.
J'ai résolu le problème comme suit:
Le problème est que cela fonctionne pour la structure de l'exemple, si j'essaie de ramasser les paramètres du formulaire, envoie moi non pas comme un json:
Résultat:
Et serializeArray():
itemsPerPage 5
page 1
Que je peux l'envoyer que dans la structure de dataToSend? le seul moyen est d'aller dans les paramètres?
Mon environnement:
AngularJs, spring mvc, Gson jsonobject
Habituellement si j'envoie un complexe d'objet json de police fin de de back-end, je vais faire de façon générique comme ci-dessous gérer.
première:
- je utiliser angularJs pour soumettre une formaté chaîne json, je crois à l'aide de jquery ajax sera le même, juste besoin d'être sûr que les données u est envoyé au format json chaîne.
https://docs.angularjs.org/api/ng/function/angular.toJson
deuxième:
u pouvez regarder le contenu json est de passer à la mvc du contrôleur et du contrôleur u peut utiliser Gson pour convertir et objet json.