HTTP POST using JSON in Spring Rest

34,492

try to remove model from the code, as i can see in your curl request you didn't use model attribute and everything works. try this:

 public static void main(String[] args) {

    final String uri = "url";
    RestTemplate restTemplate = new RestTemplate();
    // Add the Jackson message converter
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    // create request body
    String input = "{\"name\":\"name\",\"email\":\"[email protected]\"}";


    // set headers
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "Basic " + "xxxxxxxxxxxx");
    HttpEntity<String> entity = new HttpEntity<String>(input, headers);

    // send request and parse result
    ResponseEntity<String> response = restTemplate
            .exchange(uri, HttpMethod.POST, entity, String.class);

    System.out.println(response);
}
Share:
34,492
youssef Liouene
Author by

youssef Liouene

Updated on December 19, 2020

Comments

  • youssef Liouene
    youssef Liouene over 3 years

    I would like to make a simple HTTP POST using Spring RestTemplate. the Wesb service accept JSON in parameter for example: {"name":"mame","email":"[email protected]"}

       public static void main(String[] args) {
    
        final String uri = "url";
        RestTemplate restTemplate = new RestTemplate();
        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        // create request body
        String input = "{   \"name\": \"name\",   \"email\": \"[email protected]\" }";
        JsonObject request = new JsonObject();
        request.addProperty("model", input);
    
        // set headers
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Authorization", "Basic " + "xxxxxxxxxxxx");
        HttpEntity<String> entity = new HttpEntity<String>(request.toString(), headers);
    
        // send request and parse result
        ResponseEntity<String> response = restTemplate
                .exchange(uri, HttpMethod.POST, entity, String.class);
    
        System.out.println(response);
    }
    

    When I test this code I got this error:

     Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 400 Bad Request
    

    when I call webservice with Curl I have correct result:

     curl -X POST -H "Authorization: Basic xxxxxxxxxx" --header "Content-Type: application/json" --header "Accept: application/json" -d "{   \"name\": \"name\",   \"email\": \"[email protected]\" } " "url"
    
  • fall
    fall over 6 years
    Can the message converter convert a Java object into json string? Let's say input is an ojbect of type User. User = new User("name", "[email protected]");