2016-04-02 4 views
2

zu senden Ich versuche, Daten aus einem HTML-Formular zu erfassen und an MVC-Controller senden, aber der folgende Code funktioniert nicht. Kann mir bitte jemand hier helfen?Nicht in der Lage, JSON-Daten von AJAX-Aufruf an MVC-Controller

var form = JSON.stringify(jQuery('#project_form').serializeArray()); 
    $.ajax({ 
    contentType : "application/json; charset=utf-8", 
    dataType : "json", 
    type: "POST", 
    url: "/SE/doLogin", 
    data: form, 
    success: function(response){ 
    window.location.href = response; 

Und hier ist mein Controller

@RequestMapping(value = "/doLogin",method = RequestMethod.POST,consumes = "application/json",produces="text/plain") 
@ResponseBody 
public String sayHello(@RequestBody TestDao templateModel){ 
    System.out.println("say"); 
    System.out.println(templateModel.getEmail()); 
    TestMethod t1 = new TestMethod(); 
      t1.getValues(); 
    return "newsFeed"; 

} 

Wenn ich kein Argument zu halten, es funktioniert und S.o.p wird immer auf der Konsole gedruckt. Ich bin mir nicht sicher, ob @RequestBody nicht funktioniert.

+0

Und wie sehen TestDao und Ihre Json-Daten aus? – starcorn

+0

@starcorn Danke für das Hinweis auf das Json-Datenformat. Ich denke, es gibt ein Problem damit. Nach var form = JSON.stringify (jQuery ('# project_form'). SerializeArray()); Ich bekomme JSON wie unten . [{"name": "email", "wert": "kala"}, {"name": "passwort", "wert": "kala"}] Irgendeine Idee, wie wir das beheben können? –

Antwort

0

Sie können ein Model-Objekt definieren, um Ihr json-Objekt zuzuordnen.

@RequestMapping(value = "/doLogin",method = RequestMethod.POST,consumes = "application/json",produces="text/plain") 
@ResponseBody 
    public String sayHello(@ModelAttribute TemplateModel templateModel){ 
     System.out.println("say"); 
     System.out.println(templateModel.getEmail()); 
     TestMethod t1 = new TestMethod(); 
       t1.getValues(); 
     return "newsFeed"; 

    } 

// This bean should map your json object. 
public class TemplateModel{ 
     private String email; 
     private String values; 
    } 
0

Ihre Formularserialisierung kann nur Schlüssel-Wert-Paare erzeugen. Sie können also kein Objekt im MVC-Controller konsumieren.

Es gibt zwei Möglichkeiten, um es zum Laufen zu bringen:

  • Accept Karte von Name-Wert statt TestDao Objekt.
  • Schreiben Sie eine Funktion in Javascript, die Ihre Form der
0

Verwenden Sie eine jquery Objektserialisierung Erweiterung Name-Wert auf ein Objekt der Form TestDao wandelt JavaScript-Objekt von Formular zu erstellen. Dann senden Sie es als JSON zum Controller. Gesammelte von here

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name] !== undefined) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

Verwendung es wie

var form = JSON.stringify(jQuery('#project_form').serializeObject()); 
    $.ajax({ 
    contentType : "application/json; charset=utf-8", 
    dataType : "json", 
    type: "POST", 
    url: "/SE/doLogin", 
    data: form, 
    success: function(response){ 
    window.location.href = response; 

Hoffnung, das hilft.

0

Bitte stellen Sie sicher, dass Sie Jakson Gläser in Ihrer Abhängigkeitsbibliothek haben. Wenn Sie Feder 4 verwenden, Rahmen wird automatisch Pickup der Inhalt Unterhändler als JSON und wird für die Jakson Gläser im Hintergrund finden JSON-Server zu transportieren und JSON-Daten zurück vom Server

Verwendung JAXB rüttelt, falls erhalten Sie müssen XML als Content-Vermittler behandeln.