自定义HttpMessageConverter是解决这个错误的唯一选择吗?

3

我有一个Spring Boot应用程序,其中有一个通用的ApiCaller类来调用不同的URL。我使用RestTemplate进行调用。调用的详细信息来自我们内部数据库。

最初的回答:

我有一个Spring Boot应用程序,在其中使用一个通用的ApiCaller类来调用不同的URL。我使用RestTemplate进行调用。调用的详细信息来自我们内部数据库。

 switch (serviceRequest.getMethod()) {
            case "POST":
              response = this.restTemplate.postForEntity(url,serviceRequestBody, Map.class).getBody();
              break;
            case "GET":
              response = this.restTemplate.getForEntity(url,serviceRequestBody, Map.class).getBody();
              break;
            default:
              break;
          }


可以看到,我将responseType设置为Map.class,这将把api的响应转换为一个map。对于返回json响应的api,它可以正常工作。然而,对于返回xml响应的资源,则无法正常工作,会出现以下异常:

Original Answer: 最初的回答

no suitable HttpMessageConverter found for response type [interface java.util.Map] and content type [application/xml]
      at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:110) ~[spring-web-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
      at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:932) ~[spring-web-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
      at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:916) ~[spring-web-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
      at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:663) ~[spring-web-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
      at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:621) ~[spring-web-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
      at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:415) ~[spring-web-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]

我遇到过类似的问题,并发现自定义消息转换器可以解决这个问题。是否有内置的HttpMessageConverter可以处理此问题?

最初的回答:

我经历了类似的问题,并发现自定义消息转换器可以解决这个问题。是否有任何内置的HttpMessageConverter可以处理这个问题?


为什么你不使用带有头部和HttpEntityexchange方法? - undefined
我创建了一个拦截器来设置头部信息。我进行了调试,从服务端得到了响应。在将响应转换为Map时出现了异常。 - undefined
请将媒体类型转换为RestTemplate的转换器。 - undefined
很抱歉,我不明白你的意思。能否请你解释一下或者提供一个代码示例? - undefined
1个回答

3

HttpMessageConverter添加到RestTemplate对象中,以将任何类型的响应转换为相应的格式。

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//converter to process any kind of response, 
converter.setSupportedMediaTypes(Arrays.asList({MediaType.ALL}));         
messageConverters.add(converter);  
restTemplate.setMessageConverters(messageConverters);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接