我有一个带有PUT请求映射的简单Spring 3.0控制器
@Controller
public class FooController {
@RequestMapping(value = "/foo/{id}", method = RequestMethod.PUT)
public @ResponseBody FooView put(@PathVariable String id, @Valid PutFoo putFoo, BindingResult bindingResult) {
inspector.inspect(bindingResult);
return fooService.update(id, putFoo);
}
}
当我在请求正文中使用
Foo
参数执行PUT时,PutFoo对象没有被该数据填充/绑定。如果我将HttpServletRequest添加到方法签名并打印请求的主体,请确保有足够的数据,但PutFoo
为空。如果我将请求方法类型更改为POST,然后执行POST,则所有这些工作都会和谐地进行。
为了完整起见,我通过cURL到达端点
curl -H 'Content-Type: application/x-www-form-urlencoded' -X PUT -F "fooString=foo" http://localhost:8080/foo/9999
最佳答案
由于使用了冲突的curl参数,您确定您实际上是在发送http PUT请求吗?例如
-F,--form
(HTTP)这可以让curl模拟用户具有的填写表格
按提交按钮。这会导致使用以下命令卷曲到POST数据
符合RFC 2388的Content-Type multipart / form-data。
source