Search code examples
javahtmlspringresttemplatespring-resttemplate

Spring RestTemplate to ping google


How can I use spring restTemplate in java for a GET request to google.com or any other website? I tried like below but didn't work. Got error while extracting response for type [class java lang.String] and content type [text/html;charset=utf-8]

   ResponseEntity<String> response = null;
   HttpHeaders headers = new HttpHeaders();
   headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
   MultiValueMap<String, Object> map = null;
    if(! method.matches("GET")) {
      objectMapper.enable(DeserilizationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
      map = objectMapper.convertValue(resource, LinkedMultiValueMap.class);
    }
    HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(map, headers);
    List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setSupportedMediaTypes(Arrays.asList(MediaType.ALL));
    messageConverters.add(converter);
    restTemplate.setMessageConverters(messageConverters);
    response = restTemplate.exchange("https://www.google.com", HttpMethod.GET, entity, String.class);

Solution

  • From the snippet above seems that the problem arise from messageConverters, you are overwriting the whole default RestTemplate messageConverters causing it to fail.

    List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
    ...
    restTemplate.setMessageConverters(messageConverters);
    

    Instead if you have a custom converter you should just:

    restTemplate.getMessageConverters().add(converter)
    

    MECE version, Just this should work:

    final RestTemplate restTemplate = new RestTemplate();
    
    @GetMapping("/test")
    public ResponseEntity<String> test(){
        return restTemplate.exchange("https://www.google.com", HttpMethod.GET, null, String.class);
    }