2016-06-25 9 views
1

Ich versuche, eine Spring MVC-Anwendung zu erstellen und AJAX-Aufruf beim Klicken auf einen Absenden Button zu senden.Kann JSON-String nicht an ein Objekt im Controller in Spring MVC gebunden werden?

Unten ist die Controller-Methode:

@ResponseBody 
    @RequestMapping(value = "/addTask" , method=RequestMethod.POST) 
    public String addTask(@ModelAttribute(value="task") Task task, BindingResult result, Model model){ 
     String returnText = null; 
     System.out.println(task.getDescription()); // printing null 
     return "success" ; 
    } 

Aber ich bin immer alle Attribute in Task Objekt als null.

Allerdings kann ich Json als String im Controller empfangen und über Gson api in Object konvertieren.

@ResponseBody 
    @RequestMapping(value = "/addTask" , method=RequestMethod.POST) 
    public String addTask(@RequestBody String task){ 
     String returnText = null; 

     Gson gson = new Gson(); 
     Task rr = gson.fromJson(task, Task.class); 
     taskList.add(rr); 
     return "success" ; 
    } 

Unten ist der Ajax-Code:

function doAjaxPost() { 

     var id = $('#id').val(); 
     var desc = $('#description').val(); 
     var dueDate = $('#dueDate').val(); 
     var obj = { "id" : id, "description" : desc, "dueDate": dueDate}; 
     console.log(obj) 

     $.ajax({ 
      type : "POST", 
      contentType : "application/json", 
      url : "/spring/addTask", 
      data : JSON.stringify(obj), 
      dataType : 'json', 
      timeout : 100000, 

      success: function(response){ 
      $('#description').val(''); 
      $('#dueDate').val(''); 
      $('#id').val(''); 
      }, 
      error: function(e){ 
      alert('Error: ' + e); 
      console.log(e); 
      } 
      }); 
      } 

Ich habe bereits die unter 2 Abhängigkeit in pom.xml hinzugefügt.

<dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.6.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.6.3</version> 
     </dependency> 

Antwort

0

Der Grund, warum JSON nicht in der Lage war, auf das Objekt zu binden, wie ich nicht implement Serializable in meiner POJPO Klasse war.

Nachdem ich Serializable implementiert habe, ist das Problem gelöst. Danke.

0

Entfernen Sie die Leitung contentType : "application/json" von Ihrem Ajax-Anruf, während Sie die POST-Anfrage machen. Es wird die Werte in Modell und 100% Arbeit setzen. Lass es mich wissen, wenn dir das hilft.

0

Versuchen Sie var str = $("#myForm").serialize();, wenn Sie Ihr Modellattribut mit Formular erstellen. Ansonsten sende einfach obj.serialize() im Datenteil von ajax.

0

Versuchen Sie, Ihrer @RequestMapping-Annotation consumes = {"application/json"} hinzuzufügen. Die automatische Konvertierung sollte dann durchgeführt werden, vorausgesetzt, dass sich die Abhängigkeiten von jackson auf dem Klassenpfad befinden. Sie sollten danach keine @ModelAttribute-Annotation mehr benötigen.

@ResponseBody 
@RequestMapping(value = "/addTask" , method=RequestMethod.POST, consumes = { "application/json" }) 
public String addTask(Task task, BindingResult result, Model model){ 
    ... 
} 
+0

Dies löst nicht mein Problem. Stört es dich, wenn ich dir ein kleines Zip-Projekt mit meinem Code gebe? Ich werde dir wirklich dankbar sein – Vicky

Verwandte Themen