Если я разбираю ответ POST как строку, он отлично работает:
ResponseEntity<String> stringResponse = restTemplate.postForEntity(DruidClient.QUERY_HOST + "/druid/v2", query, String.class);
String valueResults = stringResponse.getBody();
DruidValueResult[] results = new ObjectMapper().readValue(valueResults, DruidValueResult[].class);
Однако, если я скажу весне, чтобы разобрать ответ напрямую:
ResponseEntity<DruidValueResult[]> results = restTemplate.postForEntity(DruidClient.QUERY_HOST + "/druid/v2", query, DruidValueResult[].class);
Я получаю следующую ошибку:
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class [Lcom.dripstat.metricprocessor.druid.DruidValueResult;] and content type [application/smile]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:108)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:788)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:773)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:553)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:506)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:361)
Почему пружина не может самостоятельно проанализировать полученный json?
Объекты, переданные и возвращаемые из методов getForObject(), postForLocation() и put() и преобразуются в HTTP-запросы и из HTTP-ответов HttpMessageConverters. Конвертеры для основных типов mime и типов Java зарегистрированы по умолчанию, но вы также можете написать свой собственный конвертер и подключить его в RestTemplate. В приведенном ниже примере я покажу вам, как это делается.
Я полагаю, что то же самое и для postForEntity()
, поэтому вам может понадобиться добавить конвертер сообщений для вашего типа mime, поскольку по умолчанию он не помешан.
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/smile" />
<property name="supportedMediaTypes" value="text/javascript" />
</bean>
</list>
</property>
</bean>