2016-04-02 24 views
2

1つのHTMLフォームからデータを取得してMVCコントローラに送信しようとしていますが、以下のコードは機能しません。誰かがここで私を助けてくれますか?ajax呼び出しからJSONデータをMVCコントローラに送信できません

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; 

そして、ここでは

@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"; 

} 

私は任意の引数を保っておりません、それが動作してS.o.pがコンソールに印刷されたばかりの私のコントローラです。 @RequestBodyが動作していない間はわかりません。

+0

TestDaoとJsonデータはどのように見えますか? – starcorn

+0

@starcorn Jsonデータ形式を指摘してくれてありがとう。私はそこに問題があると思う。後で var form = JSON.stringify(jQuery( '#project_form')。serializeArray()); 次のようにJsonを取得しています。 [{"name": "email"、 "value": "kala"}、{"name": "password"、 "value": "kala"}] これをどのように修正できますか? –

答えて

0

Modelオブジェクトを定義してjsonオブジェクトをマッピングできます。

@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

フォームシリアル化でキーと値のペアのみを生成できます。したがって、実際にMVCコントローラ内のオブジェクトを消費することはできません。

  • ではなくTestDaoオブジェクトの名前と値のマップを受け入れ:

    は、それが働いて得るための2つの方法があります。

  • TestDao
0

は、フォームからのjavascriptオブジェクトを作成するために、jQueryオブジェクトの直列化の拡張機能を使用して、フォームのオブジェクトにフォームの名前と値を変換し、JavaScriptで関数を記述。その後、JSONとしてコントローラに送信します。 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; 
}; 

から収集

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; 

のようにそれを使用し、これは役立ちます願っています。

0

Jakson jars依存ライブラリにあることを確認してください。あなたは、スプリング4を使用している場合、フレームワークはJSONとして自動的にピックアップコンテンツ交渉し、サーバーにJSONを輸送し、サーバ

使用から戻った場合のJAXBの瓶を、JSONデータを取得するために、バックグラウンドでJaksonの瓶を見つけるだろうコンテンツネゴシエーターとしてXMLを処理する必要があります。

関連する問題