cURL - Envoi de données JSON à Spring REST

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