cURL - Publier des données JSON dans Spring REST
Cet article vous montre comment utiliser la commandecURL
pour POSTER des données JSON sur une API Spring REST.
1. Spring REST
Une API REST Simple Spring pour valider une connexion.
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
Pour tester ci-dessus l'API REST, vous pouvez utiliser la commandecURL
pour publier des données JSON comme ceci:
2.1 On Windows, you need to escape the double quotes
Terminal
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 :
Terminal
$ curl -H "Content-Type: application/json" -X POST -d '{"username":"example","password":"abc"}' http://localhost:8080/api/login/ Successfully login
2.3 --help
Terminal
$ 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
Terminal
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