首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rest以普通字符串的形式发送响应,但是Content是"application/json;charset=UTF-8“。我怎样才能读到回应?

Rest以普通字符串的形式发送响应,但是Content是"application/json;charset=UTF-8“。我怎样才能读到回应?
EN

Stack Overflow用户
提问于 2020-09-18 21:42:31
回答 1查看 577关注 0票数 0

我们正在使用第三方rest,它返回一个UUID作为对POST请求的响应。响应的MediaType是application/json,但是返回的uuid作为纯文本返回,而不是作为JSON (带有引号)返回。我已经把MappingJackson2HttpMessageConverter附在Spring RestTemplate上了。看起来(我不确定),由于内容类型是application/json,它试图将其解析为JSON,但由于它不包含双引号而无法解析它。以下是例外情况

代码语言:javascript
运行
复制
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]

代码:

代码语言:javascript
运行
复制
@Test
public void test1() {
  String uuid = restTemplate.postForObject("/order", orderDTO, String.class);
    assertThat(uuid).isNotNull();
}

我该如何处理这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 22:12:22

我尝试了下面的解决方案。它可以工作,但它也强制所有其他媒体类型的application/json响应的转换由StringHttpMessageConverter而不是MappingJackson2HttpMessageConverter处理。我添加了一个拦截器,它在转换回复之前拦截它,然后修改内容类型。

代码语言:javascript
运行
复制
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;
                });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63963180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档