我有一个带有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

09-15 22:38