Search code examples
springspring-bootcontent-typeresttemplatespring-rest

How to send body content as raw JSON and not form-data in Spring Boot RestTemplate


I have a spring boot application and trying to invoke a rest service of another company by using RestTemplate.

The remote Rest Service required multiple header and body content as Raw JSON. Here is the sample required body request :

{ 
 "amount": "10000",
 "destinationNumber": "365412"
}

But my request body generate like this :

{ 
 amount= [10000],
 destinationNumber= [365412]
}

I've done like this :

    String BASE_URI = "http://server.com/sericeX";
    RestTemplate template = new RestTemplate();

    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
    headers.add("Authorization","Some token");
    headers.add("Content-Type", "application/json");

    MultiValueMap<String, String> bodyParam = new LinkedMultiValueMap<>();
    bodyParam.add("amount", request.getAmount());
    bodyParam.add("destinationNumber",request.getDestinationNumber());

    HttpEntity entity = new HttpEntity(bodyParam,headers);

    ResponseEntity<TransferEntity> responseEntity = template.exchange(BASE_URI, HttpMethod.POST, entity,TransferEntity.class);
    TransferEntity transferEntity = responseEntity.getBody();

Could you please tell me how can i generate body request as JSON ?


Solution

  • Thanks to @Alex Salauyou based on his comment using HashMap instead of MultiValueMap solved the problem. Here is the changes need to be done:

    HashMap<String, String> bodyParam = new HashMap<>();
    bodyParam.put("amount", request.getAmount());
    bodyParam.put("destinationNumber",request.getDestinationNumber());