cURL – JSONデータをSpring RESTに投稿する
この記事では、cURL
コマンドを使用してJSONデータをSpring RESTAPIにPOSTする方法を示します。
1. Spring REST
ログインを検証するためのシンプルなSpring REST API。
LoginController.java
package com.example.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.example.controller; public class Login { String username; String password; //getters and setters }
2. cURL Post JSON
上記のRESTAPIをテストするには、cURL
コマンドを使用して次のようなJSONデータを投稿できます。
2.1 On Windows, you need to escape the double quotes
ターミナル
c:\> curl -H "Content-Type: application/json" -X POST -d {\"username\":\"example\",\"password\":\"abc\"} http://localhost:8080/api/login/ Successfully login
2.2 For *nix or Mac OSX, add a single quote like this :
ターミナル
$ curl -H "Content-Type: application/json" -X POST -d '{"username":"example","password":"abc"}' http://localhost:8080/api/login/ Successfully login
2.3 --help
ターミナル
$ curl --help ... -d HTTP POST data -H Pass custom header LINE to server -X Specify request command to use
2.4 Display detail with curl -v
ターミナル
c:\> curl -v -H "Content-Type: application/json" -X POST -d {\"username\":\"example\",\"password\":\"abc\"} http://localhost:8080/api/login/ Note: Unnecessary use of -X or --request, POST is already inferred. * timeout on name lookup is not supported * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8080 (#0) > POST /api/login/ HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.52.1 > Accept: */* > Content-Type: application/json > Content-Length: 38 > * upload completely sent off: 38 out of 38 bytes < HTTP/1.1 200 < Content-Type: text/plain;charset=UTF-8 < Content-Length: 18 < Date: Thu, 26 Jan 2017 08:00:03 GMT < Successfully login* Curl_http_done: called premature == 0 * Connection #0 to host localhost left intact