Search code examples
javaspringrestspring-mvcrestlet

Calling RESTlet API from Spring Framework


I have a POST API written in Restlet framework which accepts the data in org.restlet.representation.Representation form, I want to hit the service with some variables and there values from Spring project. How to do that?

Right now I am using the HTTPHeaders to send the data but the API is not accepting the values, all the fields the API is showing as NULL. The code is as follows:

    final String uri = "http://localhost:8080/MyServices/adduser";
    String userid = "05580a6caa7244a6986ca834403f1a93";
    String usertype = "buyer";
    String username = "shivam42";
    RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.add("userid", userid);
    headers.add("usertype", usertype);
    headers.add("username", username);
    HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

    ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST, entity, String.class);
    System.out.println(result);

And the service is like this:

@Post
public String newUser(Representation entity) {
    Form form = new Form(entity);
    String userid = form.getValues("userid");
    String usertype = form.getValues("usertype");
    String username = form.getValues("username");
    System.out.println(userid);
    System.out.println(usertype);
    System.out.println(username);
    return userid;
}

This is the code generated from curl Maybe someone can help me with this:

curl -X POST -H "Cache-Control: no-cache" -H "Postman-Token: 33e6a1c5-c1c9-694f-3d7f-26cbcea61870" -H "Content-Type: application/x-www-form-urlencoded" -d 'userid=05580a6caa7244a6986ca834403f1a93&usertype=buyer&username=shivam42' "http://localhost:8080/MyServices/adduser"

When I am calling the API from POSTMAN it is giving me the correct userid, now how to call it from Spring project? Am I doing something wrong?


Solution

  • From the Spring forum I found the solution to this. Now my code is:

    final String uri = "http://localhost:8080/MyServices/adduser";
    String userid = "05580a6caa7244a6986ca834403f1a93";
    String usertype = "buyer";
    String username = "shivam42";
    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
    params.add("userid", userid);
    params.add("usertype", usertype);
    params.add("username", username);
    
    RestTemplate restTemplate = new RestTemplate();
    HttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
    HttpMessageConverter stringHttpMessageConverternew = new StringHttpMessageConverter();
    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    messageConverters.add(stringHttpMessageConverternew);
    messageConverters.add(formHttpMessageConverter);
    restTemplate.setMessageConverters(messageConverters);
    System.out.println(restTemplate.postForObject(uri, params, String.class));
    

    In my case I am also getting the expected result If I exclude the following code:

    HttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
    HttpMessageConverter stringHttpMessageConverternew = new StringHttpMessageConverter();
    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    messageConverters.add(stringHttpMessageConverternew);
    messageConverters.add(formHttpMessageConverter);
    restTemplate.setMessageConverters(messageConverters);