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 を使用してみてください。幸運を!