REST POST works correctly with POSTMAN but exception when using Spring RestTemplate
51,988
Solution 1
You are setting the 'Accept' header, which defines which content type you will accept as a response.
Instead you must set the header 'Content-Type' with 'application/json'.
Edit:
In your java code id is a string, in the postman its a number. May be this makes the server fail?
Solution 2
Try this way
try {
return restTemplate.exchange(url, httpMethod, httpEntity, String.class);
} catch(HttpStatusCodeException e) {
return ResponseEntity.status(e.getRawStatusCode()).headers(e.getResponseHeaders())
.body(e.getResponseBodyAsString());
}
Author by
Rehan
I have 9+ years of experience in Java. I have my blog - https://www.javainuse.com
Updated on January 07, 2022Comments
-
Rehan over 2 years
I am writing a Rest client to post JSON data using Spring RestTemplate. Using POSTMAN and following JSON data in body get the response correctly-
{ "InCode":"test", "Name":"This is test", "Email":"[email protected]", "Id":18, }
However when trying to hit the REST API using Spring RestTemplate as follows
ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.POST, getHeaders(), String.class); private HttpEntity<?> getHeaders() throws JSONException { JSONObject request = new JSONObject(); request.put("Email", "[email protected]"); request.put("Id", "18"); request.put("Name", "This is test"); request.put("InCode", "test"); headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); return new HttpEntity<>(request.toString(), headers); }
I get the exception-
11:52:56.808 [main] DEBUG o.s.web.client.RestTemplate - Created POST request for "http://server-test/platform/v4/org" 11:52:56.815 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, */*] 12:03:47.357 [main] DEBUG o.s.web.client.RestTemplate - Writing [{"InCode":"test","Email":"[email protected]","Id":"18","Name":"This is test"}] using [org.springframework.http.converter.StringHttpMessageConverter@6a1aab78] 11:52:57.574 [main] DEBUG o.s.web.client.RestTemplate - POST request for "http://server-test/platform/v4/org" resulted in 500 (Internal Server Error); invoking error handler Exception in thread "main" org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)
Would be thankful for any help.
-
cassiomolin almost 8 yearsLooks like your are performing a request to the base URL of your application. I think that's not what you want.
-
darshgohel almost 8 yearsYou can go through this Link which clearly tells when which types of error will be returned by REST. Can you give full error trace to track it down further?
-
Rehan almost 8 yearsThe URL is correct. And this is the complete StackTrace. It only does not have the line number where it was occurring during call,
-
JS noob over 3 yearsDid you ever figure this out?
-
-
Rehan almost 8 yearsI did add content type but getting the same exceptiom. The service accepted both JSON and XML data. It is working with XML. Also the POSTMAN returns HTTP code 500 in some scenarios but the description is good like the data already exists at server side. But RestTemplate only gives the stacktrace as above.
-
Rami Del Toro about 7 yearsThank you Stefan. This solved a icky bug that was faced. I started off posting requests to a system via WebResource (Jersey) as part of a POC. All looks fine, once I implemented the code in a project via Spring Rest Template, the other system mentioned that they are receiving an empty JSON. Long story short and trouble shooting procedures, applying headers.setContentType(MediaType.APPLICATION_JSON); resolved the issue.