'Spring Boot - Rest templates seems to ignore accept header set through the HttpEntity

I am making a call to one of the Jasper server API endpoints and I have to set the header "Accept" to "application/json" for the service to return a JSON response. I have validated the API from Postman -

Request from Postman

When I try to simulate the same behavior from my Spring Boot rest client, I try to set the accept header to 'application/json' but Spring seems to ignore the same and adds the accept header as shown below -

Rest template debug output

I have validated the same by enabling DEBUG for rest template using the following parameter - logging.level.org.springframework.web.client.RestTemplate=DEBUG

Below is the code snippet for my rest client -

HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBasicAuth(serviceUsername, servicePassword, StandardCharsets.UTF_8);

ResponseEntity<String> response = null;

String url = serviceEndpoint + "?reportUnitURI="
                    + URLEncoder.encode(reportPath, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20")
                    + "&label=" + URLEncoder.encode(label, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20");
            LOGGER.info("URL : " + url);

HttpEntity<String> requestEntity = new HttpEntity<String>("",
                    headers);

response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
  • Can someone please help explain the behavior here?
  • Why does my header values for 'accept' gets ignored?
  • What could be done to pass the 'accept' header properly?


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source