0

Ajax JQuery から Spring @RequestBody へ? データを渡すにはどうすればよいですか? 私はしばらくの間、フォームフィールドを渡して春を過ごしていますが、新しいシステムに取り組んでおり、Ajax と RESTful を使用してデータを渡したいと考えています。私のコントローラーは以下のサンプルのように見えますが、投稿するための ajax 呼び出しで誰かを喜ばせてくれませんか?? Spring コントローラーに投稿してデータを本文に入れるにはどうすればよいですか

@RequestMapping(method=RequestMethod.PUT, value="/employee/{id}")
public ModelAndView updateEmployee(@RequestBody String body) {
        Source source = new StreamSource(new StringReader(body));
        Employee e = (Employee) jaxb2Mashaller.unmarshal(source);
        employeeDS.update(e);
        return new ModelAndView(XML_VIEW_NAME, "object", e);
    }
4

2 に答える 2

0

REST を使用する場合、さまざまな HTTP メソッドの違いを理解することが重要です。PUT は通常、新しいコレクションを作成するか、既存のコレクションを置き換えることを意味します。POST は通常、レコードをコレクションに追加していることを意味します。この 2 つの主な違いは、PUT がべき等であることです。つまり、同じ操作を繰り返し繰り返しても、サーバーの状態は変化しません。

以下のコードでは、メソッドは「updateEmployee」と呼ばれています。これは、コレクションを新しいコレクションに置き換えていることを意味します。したがって、PUT は、このシナリオで使用する最も適切な HTTP メソッドです。ただし、コードにバグがあります。パラメータリストで「id」を定義しませんでした:

// Added String id as a PathVariable
@RequestMapping(method=RequestMethod.PUT, value="/employee/{id}")
public ModelAndView updateEmployee(@RequestBody String body, @PathVariable String id) {   

        // You really don't need to do this. The Spring Framework can deserialize
          // objects for you. However, one issue at a time ;)
           // also, changed e to "employee" so the variable has a better name.
        Source source = new StreamSource(new StringReader(body));
        Employee employee = (Employee) jaxb2Mashaller.unmarshal(source);

        employeeDS.update(employee);
        return new ModelAndView(XML_VIEW_NAME, "object", employee);
}

サーバーへのリクエストを行うには、jQuery AJAX を使用します。

$.ajax({
  url: "/employee/2?t="+new Date().getTime(),
  contentType: 'application/x-www-form-urlencoded',
  type: "PUT",
  data: dataString,
  context: document.body,
  success: function(e){
          alert(e);                    
  },
      error: function(jqXHR, textStatus, errorThrown) {
          alert(" + textStatus + " : " + errorThrown);
      } 
});

dataString は、データの文字列表現です。フォームをシリアル化するか、JSON を使用するか、URL エンコードされたフォームを送信できます。質問に追加のコードやエラー メッセージが表示されないと、データをサーバーに送信しようとしたときにデータをどのように表現しているかが不明確になります。ここから始めて、Java コードで上記のエラーを修正すると、この特定のエラーを回避できるはずです。

REST メソッドにデータを送信するもう 1 つの方法は、テストのためだけに、標準フォームを使用することですが、Spring で使用しているため、method="PUT" を使用します。

<form name="test" action="/employee/2" method="PUT">
    <input type="text" name="firstname" />
    <input type="text" name="lastname" />
    <input type="submit" name="submit" value="submit" />
</form>

これは application/x-www-form-urlencoded を使用します。逆シリアル化できない場合は、代わりに JSON を使用してみてください。幸運を!

于 2012-06-09T02:21:09.167 に答える
-1

希望はあなたに始まりを与えます!


$.ajax({
    contentType : "application/json",
    dataType : 'json',
    type : "PUT",
    url : targetUrl,
    data : $(this).serializeObject(), //json serialization (like array.serializeArray() etc)
    async : false,
    success : function(data) {
       // response
    },
    error : function(request, status, error) {
       // any errors
    }
});

于 2012-06-08T14:13:12.157 に答える