I need to send a GET request with a header: Content-Type: application/camiant-msr-v2.0+xml
. I expect an XML response from the server. I tested the request and response with Postman and everything is good. But when I try to do it in Spring with RestTemplate
, I always get a 400 bad request. The exceptions from spring
are:
Jul 09, 2016 12:53:38 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/smp] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 400 Bad Request] with root cause
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
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)
My code:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/camiant-msr-v2.0+xml");
HttpEntity<?> entity = new HttpEntity<Object>(headers);
log.debug("request headers: " + entity.getHeaders());
ResponseEntity<String> response = restTemplate.exchange(queryUrl, HttpMethod.GET, entity, String.class);
The debug message shows the header as {Content-Type=[application/camiant-msr-v2.0+xml]}
, which seems to be correct. I wonder what's wrong with my request and if there's a way to see the requests on the wire to debug.
Actually the header to be passed should be named Accept
rather than Content-Type
, since it's a GET method. But the server API doc somehow says it expects Content-Type
, and the API from command line/Postman worked well on both Content-Type
and Accept
. I think it's the Java library that prevents Content-Type
header to be passed to GET requests.