RESTAPI以普通字符串形式发送响应,但内容类型为;应用程序/json;字符集=UTF-8";。我如何阅读回复

RESTAPI以普通字符串形式发送响应,但内容类型为;应用程序/json;字符集=UTF-8";。我如何阅读回复,json,spring,rest,parsing,jackson,Json,Spring,Rest,Parsing,Jackson,我们正在使用一个第三方RESTAPI,它返回一个UUID作为对POST请求的响应。响应的媒体类型是application/json,但是返回的uuid是纯文本,而不是类似于json的“7c49cec7-8ae8-44c8-bc27-866b6efcfe59”(带引号)。 我已将MappingJackson2HttpMessageConverter附加到Spring Rest模板。 似乎(我不确定)因为内容类型是application/json,所以它试图将其解析为json,但由于不包含双引号,所

我们正在使用一个第三方RESTAPI,它返回一个UUID作为对POST请求的响应。响应的媒体类型是
application/json
,但是返回的uuid是纯文本,而不是类似于json的
“7c49cec7-8ae8-44c8-bc27-866b6efcfe59”(带引号)。
我已将MappingJackson2HttpMessageConverter附加到Spring Rest模板。
似乎(我不确定)因为内容类型是
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]
代码:


如何处理这种情况?

我尝试了以下解决方案。它可以工作,但它也强制所有其他媒体类型
应用程序/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;
                });

list我想你只是把它读成了StringHow?你能说得更具体一点吗?我们后来说服提供商在他们这边修复这个bug。
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;
                });