我使用 Spring 框架为 REST 服务创建了一个非常简单的 Controller 。我将 @PathVariable 与 GET 结合使用没有任何问题,但是当我尝试创建 POST 或 PUT 时,我无法 curl 该函数,并且试图找出哪里出了问题。
@Controller
public class TestController {
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public String putName(@RequestParam("name") String name, @RequestParam("value") String value) {
System.out.println("Name - " + name);
System.out.println("Value - " + value);
return "You entered " + name + " with value of " + value;
}
}
稍微编辑一下以包含一些 PHP,因为这最终是我想要调用它的地方。
如果我执行以下操作,它会按预期工作:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/RestService/test');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'name=some random name&value=just a value');
$result = curl_exec($ch);
但是,如果我尝试将参数作为数组传递,我会收到 HTTP 状态 400 - 客户端发送的请求在语法上不正确。
$data = array
(
'name' => 'some random name',
'value' => 'just a value'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/RestService/test');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result2 = curl_exec($ch);
如果我能帮助的话,我不想构建字符串,担心转义&符号等我想要传递的数据。
非常感谢任何帮助。
最佳答案
使用http_build_query
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
关于java - PHP curl 问题 - 使用 @RequestParameter 参数的 Spring 3 REST PUT/POST 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380663/