当前位置: 首页 > 知识库问答 >
问题:

自定义HttpMessageConverter是此错误的唯一选项吗?

益清野
2023-03-14

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;
          }


可以看出,我将响应类型作为Map.class发送,它将响应从api转换为map。它可以很好地处理返回json响应的api。但是,它不适用于返回xml响应的资源。它给出了以下例外:

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可以处理这个问题?

共有1个答案

羊慈
2023-03-14

HttpMessageConverter添加到restemplate对象以转换任何类型的响应

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//converter to process any kind of response, 
converter.setSupportedMediaTypes(Arrays.asList({MediaType.ALL}));         
messageConverters.add(converter);  
restTemplate.setMessageConverters(messageConverters);
 类似资料:
  • 在Bootstrap 4中,我们已经加了一系列的全局选项,让你能够在项目中轻松定制所有的组件。这些选项通过Sass变量来处理。通过内置的Gruntfile,可以简单改变一个变量的值,并重新编译。 可用的变量 您可以在_variables.scss文件找到这些变量并自定义这些变量。 变量 值 Description $spacer 1rem (默认), 或者任何大于0的值 为间隔工具指定默认的间隔值

  • org.apache.hadoop.hbase.client.rpCretryingCaller@459C8C0a,java.io.ioException:java.io.ioException:java.lang.reflect.invocationTargetException at org.apache.hadoop.hbase.protobuf.to Filter(Protobufutil

  • 本文向大家介绍android-studio 自定义VM选项,包括了android-studio 自定义VM选项的使用技巧和注意事项,需要的朋友参考一下 示例 vmoptions通过从Android Studio工具栏中选择“帮助”>“编辑自定义VM选项”,可以使用自己的个人设置覆盖默认设置。这将创建一个本地副本,您可以自由编辑它。 或者,您可以vmoptions使用下面给出的路径直接编辑默认值。请

  • 我目前正在尝试自定义首选项部分的颜色。但我不知道该怎么做。 在我的应用程序中,我有两个主题:黑暗主题和光明主题。这是用户选择的一个选项。在我的主要活动中,我设置了用户选择的主题。 在我使用 attr 定义要显示的颜色之后。 当前列表首选项: 代码:style.xml 就像我说的,我已经试过解决办法了。我该怎么办? 非常感谢托马斯 编辑我将preferenceActivity更改为preferenc

  • 问题内容: 我想与Google Gson一起使用Ajax。 因此,我试图弄清楚如何实现自己的HttpMessageConverter以便将其与@ResponseBody批注一起使用。有人可以花点时间告诉我我应该走的路吗?我应该打开什么配置?我也想知道我是否可以这样做并且仍然使用 ? 提前致谢。 问题答案: 好吧…很难找到答案,我不得不遵循很多线索来查找不完整的信息,因此我认为在此处发布完整的答案会

  • 我有一个表Message,我在其中保存传入和传出的消息。保留一列“类别”来区分,它可以有1=INCOMING,2=OUTGOING。传出的消息可以有附件。以下是我的消息实体类: 问题是AttachmentEntity通过“additionalStringId”与消息链接,我不能影响数据库模式。 我知道截取代码不起作用,但当发送方=接收方时,当我试图向自己发送消息时,我的问题就会出现。在这种情况下,