doupo2241 2012-07-08 04:31
浏览 38
已采纳

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

I have created a very simple controller for a REST services using the Spring Framework. I have no problems using the @PathVariable in conjunction with GETs but when I try to create a POST or PUT, I am unable to curl the function and am trying to figure out where I have gone wrong.

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

Editing this a bit to include some PHP since that is ultimately where I want to be calling this from.

If I do the following, it works as expected:

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

But if I try to pass the parameters as an array, I receive an HTTP Status 400 -The request sent by the client was syntactically incorrect.

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

If I can at all help it, I do not want to be building strings, worrying about escaping ampersands, and etc out of the data I want to pass.

Any help is greatly appreciated.

  • 写回答

1条回答 默认 最新

  • dongzhenju3015 2012-07-08 05:12
    关注

    Use http_build_query

    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算