web-dev-qa-db-fra.com

transmission de données JSON à un contrôleur Spring MVC

Je dois envoyer une chaîne JSON au contrôleur Spring MVC. Mais je n’ai aucune liaison de formulaire, il me suffit d’envoyer des données JSON simples à la classe Controller. Je crée jQuery AJAX appel à la méthode du contrôleur comme le code ci-dessous.

$.ajax ({
    url: "./save",
    type: "POST",
    data: JSON.stringify(array),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        alert("success ");
    }
});

Mais comment puis-je le récupérer dans la méthode Controller? (Remarque: il s'agit simplement de données JSON simples et non d'une soumission de formulaire).

41
user2702205

Ajouter les dépendances suivantes

<dependency>
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.7</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.7</version>
</dependency>

Modifier la demande comme suit

$.ajax({ 
    url:urlName,    
    type:"POST", 
    contentType: "application/json; charset=utf-8",
    data: jsonString, //Stringified Json Object
    async: false,    //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
    cache: false,    //This will force requested pages not to be cached by the browser          
    processData:false, //To avoid making query String instead of JSON
    success: function(resposeJsonObject){
        // Success Message Handler
    }
});

Côté contrôleur

@RequestMapping(value = urlPattern , method = RequestMethod.POST)
public @ResponseBody Person save(@RequestBody Person jsonString) {

   Person person=personService.savedata(jsonString);
   return person;
}

@RequestBody - Objet Jert Covert en Java
@ResponseBody- convertir Java en json

47
Vineeth Bhaskaran
  1. Html

    $('#save').click(function(event) {        
        var jenis = $('#jenis').val();
        var model = $('#model').val();
        var harga = $('#harga').val();
        var json = { "jenis" : jenis, "model" : model, "harga": harga};
        $.ajax({
            url: 'phone/save',
            data: JSON.stringify(json),
            type: "POST",           
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Content-Type", "application/json");
            },
            success: function(data){ 
                alert(data);
            }
        });
    
        event.preventDefault();
    });
    
    1. contrôleur

      @Controller
      @RequestMapping(value="/phone")
      public class phoneController {
      
          phoneDao pd=new phoneDao();
      
          @RequestMapping(value="/save",method=RequestMethod.POST)
          public @ResponseBody
          int save(@RequestBody Smartphones phone)
          {
              return pd.save(phone);
          }
      
    2. Dao

      public Integer save(Smartphones i) {
          int id = 0;
          Session session=HibernateUtil.getSessionFactory().openSession();
          Transaction trans=session.beginTransaction();
          try {
              session.save(i);   
              id=i.getId();
              trans.commit();
          }
          catch(HibernateException he){}
          return id;
      }
      
6
surya handoko

Vous pouvez personnaliser l'objet JSON avec JSON.stringify (jsonObject) et le recevoir sur le contrôleur en tant que chaîne.

Dans le contrôleur, vous pouvez utiliser le javax.json pour le convertir et le manipuler.

Téléchargez et ajoutez le .jar aux bibliothèques du projet et importez le JsonObject.

Pour créer un objet JSON, vous pouvez utiliser

JsonObjectBuilder job = Json.createObjectBuilder();
job.add("header1", foo1);
job.add("header2", foo2);
JsonObject json = job.build();

Pour le lire dans String, vous pouvez utiliser

JsonReader jr = Json.createReader(new StringReader(jsonString));
JsonObject json = jsonReader.readObject();
jsonReader.close();
2
Leonardo Silva