2012-07-08 61 views
0

我为使用Spring Framework的REST服务创建了一个非常简单的控制器。我将@PathVariable与GETs结合使用时没有问题,但是当我尝试创建POST或PUT时,我无法调整函数并试图找出我出错的地方。从PHP卷起的问题 - Spring 3使用@RequestParameter参数的REST PUT/POST方法

@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通过客户端发送-The请求是语法不正确。

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

如果我可以在所有帮助它,我不希望被建立字符串,担心逃避&符号,并等了我要传递的数据。

任何帮助,非常感谢。

+0

你试试这个命令'卷曲--data “名称=测试” 的http://本地主机:8080/RestService/test'? – 2012-07-08 04:53:04

回答

4

使用http_build_query

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
+0

这对POST有效 - 但如果我在服务器端将方法更改为PUT,并在适当的客户端更改,则所有表单均返回HTTP状态400 - 客户端发送的请求在语法上不正确。 我在做错误的服务器端? – 2012-07-08 06:11:55

+0

你有这种方法的任何Spring Security配置吗?也许有一个拦截URL配置为允许POST但不是PUT? – MattR 2012-07-09 03:45:57

+0

如果我这样做,这不是故意的。这将在上下文XML文件? – 2012-07-10 00:26:22