How to use AbstractMessageConverter using RestTemplate

376 Views Asked by At

1.Summarize the problem

I am trying to read comma separated values(CSV formatted data, not csv file) into responseEntity(ResponseEntity<List<Map<String, Object>>> responseEntity) using RestTemplate.

but, I get error below.

org.springframework.web.client.RestClientException: Error while extracting response for type [java.util.List<java.util.Map<java.lang.String, java.lang.Object>>] and content type [text/csv;charset=utf-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of java.util.ArrayList out of VALUE_STRING token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.ArrayList out of VALUE_STRING token at [Source: (PushbackInputStream); line: 1, column: 1]

2.Describe what you’ve tried

: I've tried with some Messageconverters.

and from here https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/csv-msg-converter.html I've got some useful informations there and used some. but I've kept getting the same error.

3.When appropriate, show some code

            Map<String, Object> requestBody = new HashMap<>();
            List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
            MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

            messageConverters.add(new ByteArrayHttpMessageConverter());
            messageConverters.add(new StringHttpMessageConverter());
            messageConverters.add(new ResourceHttpMessageConverter());
            messageConverters.add(new MappingJackson2HttpMessageConverter());
            messageConverters.add(new CsvHttpMessageConverter());
            converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
            messageConverters.add(converter);

            restTemplate.setMessageConverters(messageConverters);

            // Prepare headers
            HttpHeaders headers = new HttpHeaders();
            headers.add("X-ACCESS-TOKEN", getAccessToken(_casinoAuth, _casinoAuth.getCasinoAuthId().toString()));
            headers.setContentType(MediaType.TEXT_PLAIN);

            // Ready to request.
            URI apiUrl = uriComponentsBuilder.queryParams(queryParams).build().expand(pathParams).toUri();
            HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody, headers);
            ResponseEntity<List<Map<String, Object>>> responseEntity;
  • I get that error message from here.

    responseEntity = restTemplate.exchange(apiUrl, httpMethod, requestEntity, new ParameterizedTypeReference<List<Map<String, Object>>>() { });

0

There are 0 best solutions below