2016-06-25 8 views
1

私はSpring MVCアプリケーションを作成し、送信ボタンをクリックしてAjaxコールを送信しようとしています。以下はSpring MVCのjson stringをコントローラのオブジェクトにバインドできませんか?

は、コントローラのメソッドです:

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

しかし、私はヌルとしてTaskオブジェクト内のすべての属性を取得しています。

しかし私はコントローラでStringとしてjsonを受け取り、Gson APIを介してObjectに変換することができます。私はすでにのpom.xmlで、以下の2依存関係を追加した

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); 
      } 
      }); 
      } 

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

以下はAjaxコードです。

<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> 

答えて

0

JSONは私POJPOクラスでimplement Serializableではなかったように、オブジェクトにバインドすることができませんでした理由。

Serializableを実装した後、問題は解決されます。おかげさまで

0

POSTリクエスト中にAjaxコールからcontentType : "application/json"行を削除します。これは、モデルと100%作業の値を設定します。これがあなたに役立つかどうか私に教えてください。

0

var str = $("#myForm").serialize();フォームでモデル属性を作成する場合は、試してください。それ以外の場合は、ajaxのデータ部分に直接obj.serialize()を送信してください。

0

@RequestMappingアノテーションにconsumes = {"application/json"}を追加してみてください。 jacksonの依存関係がクラスパス上にある場合、自動変換が実行されます。それ以降は@ModelAttribute注釈は必要ありません。

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

これは私の問題を解決するものではありません。あなたは私のコードを持つ小さなzipプロジェクトをあなたに教えてもらえますか?私はあなたに本当に嬉しいよ – Vicky

関連する問題