PUT请求该如何传输请求参数呢?
有如下的接口
@RequestMapping(value = "testPut", method = RequestMethod.PUT)
public Result<Void> testPut(@RequestParam String foo, @RequestParam String bar) {
System.out.println(foo + " " + bar) ;
return Result.success(null);
}
通过CURL来调用该接口
# 通过-d传输请求参数失败
curl -X PUT -d "foo=foo&bar=bar" 'http://localhost:8080/testPut'
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'foo' is not present
# 但直接放在url后面是可以的
curl -X PUT 'http://localhost:8080/testPut?foo=foo&bar=bar'
但我想像POST一样 以请求体的方式传输请求参数, 而不是作为URL的一部分
现在我的方法是
@RequestMapping(value = "testPut2", method = RequestMethod.PUT)
public Result<Void> testPut2(@RequestBody FooBar fooBar) {
System.out.println(fooBar) ;
return Result.success(null);
}
@Data
static class FooBar{
public String foo;
public String bar;
}
然后以json的方式调用
curl -X PUT -H "Content-Type: application/json" -d '{"foo":"foo","bar":"bar"}' 'http://localhost:8080/testPut2'
这样是可以的 但奇怪为什么PUT只能接收json呢?
对于表单提交,tomcat默认只解析POST的表单,对于PUT和DELETE的不处理,所以Spring拿不到。
解决方案:1、修改tomcat的server.xml:
解决方案2、在web.xml中添加
HttpPutFormContentFilter