如何解决Rest API以纯字符串形式发送响应,但是内容类型为“ application / json; charset = UTF-8”我如何阅读回复
我们正在使用第三方rest API,该API返回UUID作为对POST请求的响应。响应的MediaType为application/json
,但是返回的uuid以纯文本形式返回,不是以JSON形式返回,例如"7c49cec7-8ae8-44c8-bc27-866b6efcfe59"
(带引号)。
我已经将MappingJackson2HttpMessageConverter附加到Spring RestTemplate。
似乎(我不确定),因为内容类型为application/json
,所以它尝试将其解析为JSON,但由于不包含双引号而无法对其进行解析。
以下是例外情况
org.springframework.web.client.RestClientException: Error while extracting response for type [class java.lang.Object] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('d' (code 100)): Expected space separating root-level values; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('d' (code 100)): Expected space separating root-level values
at [Source: (PushbackInputStream); line: 1,column: 3]
代码:
@Test
public void test1() {
String uuid = restTemplate.postForObject("/order",orderDTO,String.class);
assertThat(uuid).isNotNull();
}
如何处理这种情况?
解决方法
我尝试了以下解决方案。它可以工作,但也可以强制所有其他媒体类型application/json
的转换都由StringHttpMessageConverter
而不是MappingJackson2HttpMessageConverter
处理。
我添加了一个拦截器,可以在转换之前拦截响应,然后修改内容类型。
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(List.of(MediaType.APPLICATION_JSON));
messageConverters.add(converter);
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
stringHttpMessageConverter.setSupportedMediaTypes(List.of(MediaType.TEXT_PLAIN));
messageConverters.add(stringHttpMessageConverter);
restTemplate
.getInterceptors()
.add(
(request,body,execution) -> {
ClientHttpResponse response = execution.execute(request,body);
response.getHeaders().setContentType(MediaType.TEXT_PLAIN);
return response;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。