java - Spring RestTemplate 无法解析 json 响应

标签 java json spring spring-mvc

如果我将 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);

但是,如果我告诉 spring 直接解析响应:

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)

为什么spring不能直接解析生成的json?

最佳答案

来自SpringSource Blog :

Objects passed to and returned from the methods getForObject(), postForLocation(), and put() and are converted to HTTP requests and from HTTP responses by HttpMessageConverters. Converters for the main mime types and Java types are registered by default, but you can also write your own converter and plug it in the RestTemplate. In the example below, I will show you how that's done.

我认为 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>

关于java - Spring RestTemplate 无法解析 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477611/

相关文章:

javascript - 将 json 对象合并到数据表中

spring - 在 Spring MVC 应用程序中测试转发

spring - 在 Spring 上模拟 @Validated 带注释的 Controller 方法的 ConstraintValidator

java - 封闭寻址哈希表。它们是如何调整大小的?

java - 如何用 Java 编写系统首选项?我可以调用 UAC 吗?

javascript - 如何在 Strongloop 中验证外键?

ios - AFNetworking 问题 : NSErrorFailingURLKey=url, NSLocalizedDescription=请求失败:错误请求 (400)

java.lang.NoClassDefFoundError : org/springframework/cloud/test/TestSocketUtils after upgrading Spring Boot version to 3. x

java - 将 EBNF 文法转换为上下文无关文法

java - 重新渲染包含字段和标记的区域而不使用丰富的:panel?