使用@RequestParameter参数从PHP-Spring 3 REST PUT/POST方法卷曲的问题


Problems curling from PHP - Spring 3 REST PUT/POST methods using @RequestParameter parameters

我使用Spring Framework为REST服务创建了一个非常简单的控制器。我将@PathVariable与GET结合使用没有问题,但当我尝试创建POST或PUT时,我无法卷曲函数,并试图找出哪里出了问题。

@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));