Spring RestTemplate не может разобрать ответ json

1

Если я разбираю ответ 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?

Теги:
spring
spring-mvc

1 ответ

2
Лучший ответ

Из блога SpringSource:

Объекты, переданные и возвращаемые из методов 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню