0

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

私がそれを助けることができれば、渡したいデータから文字列を作成したり、アンパサンドをエスケープすることを心配したりしたくありません。

どんな助けでも大歓迎です。

4

1 に答える 1

4

http_build_queryを使用する

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
于 2012-07-08T05:12:11.997 に答える