この記事では、JSONデータをSpring REST APIにPOSTするために `cURL`コマンドを使用する方法を説明します。

1. Spring REST

ログインを検証するための簡単なSpring REST API

LoginController.java

package com.mkyong.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.** ;

@Controller
public class LoginController {

    private final Logger logger = LoggerFactory.getLogger(LoginController.class);

    @PostMapping("/api/login")
    public ResponseEntity<?> login(@RequestBody Login login) {

        logger.debug("login : {}", login);

       //validate login here

        return new ResponseEntity("Successfully login", new HttpHeaders(), HttpStatus.OK);

    }

}

Login.java

package com.mkyong.controller;

public class Login {

    String username;
    String password;

   //getters and setters
}

2. cURL投稿JSON

上記のREST APIをテストするには、 `cURL`コマンドを使用してJSONデータを次のようにポストすることができます:

2.1 Windowsでは、二重引用符をエスケープする必要があります

ターミナル

c:\> curl -H "Content-Type: application/json" -X POST -d {\"username\":\"mkyong\",\"password\":\"abc\"} http://localhost:8080/api/login/Successfully login

2.2 ** nixまたはMac OSXの場合は、次のように一重引用符を追加します。

ターミナル

$ curl -H "Content-Type: application/json" -X POST -d '{"username":"mkyong","password":"abc"}' http://localhost:8080/api/login/Successfully login

2.3

--help

ターミナル

$ curl --help

...

-d HTTP POSTデータ
-HカスタムヘッダーLINEをサーバーに渡します。
-X使用するリクエストコマンドを指定する

2.4 `curl -v`で詳細を表示する

ターミナル

c:\> curl -v -H "Content-Type:application/json" -X POST -d {\ "username \":\ "mkyong \"、\ "password \":\ "abc \"} http://localhost:8080/api/login/注:-Xまたは--requestの不要な使用は、POSTが既に推測されています。

** 名前検索のタイムアウトはサポートされていません

** 試してみる:1 ...

**  TCP__NODELAYが設定されています

**  localhost(:: 1)ポート8080(#0)に接続

> POST/api/login/HTTP/1.1
>ホスト:localhost:8080
>ユーザーエージェント:curl/7.52.1
>受け入れ:** /**
>コンテンツタイプ:application/json
>コンテンツの長さ:38
>
** 完全に送信されたアップロード:38バイトのうち38バイト

<HTTP/1.1 200
<Content-Type:text/plain; charset = UTF-8
<コンテンツの長さ:18
<日付:木、2017年1月26日08:00:03 GMT
<
**  Curl__http__done:premature == 0と呼ばれるログインに成功しました。
** 接続#0はホストlocalhostをそのまま残す