使用 REST 时,了解不同 HTTP 方法之间的区别很重要。PUT 通常意味着您将创建一个新集合或替换现有集合。POST 通常意味着您将记录添加到集合中。两者的主要区别在于 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 方法(仅用于测试)的方法是使用标准表单,但使用 method="PUT",因为这是您在 Spring 中使用的:
<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。祝你好运!