You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

第三方Rest API响应格式不符致Spring RestTemplate解析失败如何解决?

解决RestTemplate解析无引号UUID(application/json类型)的问题

这个坑我之前踩过!第三方接口明明把响应的Content-Type设成了application/json,但返回的却是不带引号的纯文本UUID——这完全不符合JSON规范,难怪Jackson解析会炸。下面给你几个靠谱的解决办法:

方法一:添加自定义StringHttpMessageConverter优先解析

既然接口返回的本质是纯文本,我们可以让RestTemplate先尝试用字符串转换器处理application/json类型的响应,绕开Jackson的JSON解析逻辑。具体步骤:

  1. 创建支持application/json的StringHttpMessageConverter:
StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
stringConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
  1. 把这个转换器放到RestTemplate的转换器列表最前面(转换器按顺序匹配,优先匹配的会先处理):
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
converters.add(0, stringConverter);

配置完成后,遇到Content-Type为application/json的响应时,会直接用字符串转换器把响应体转成String,完美解决解析报错问题。

方法二:单个请求手动提取响应体

如果你不想修改全局的RestTemplate配置,只针对这一个请求处理,可以用exchange方法代替postForObject,手动获取响应体:

@Test
public void test1() {
    ResponseEntity<String> response = restTemplate.exchange(
            "/order",
            HttpMethod.POST,
            new HttpEntity<>(orderDTO),
            String.class
    );
    String uuid = response.getBody();
    assertThat(uuid).isNotNull();
}

这种方式会直接把响应体作为字符串返回,不需要Jackson参与解析,适合临时处理个别接口的场景。

方法三:修改Jackson配置(不推荐)

你也可以让Jackson接受无引号的单值作为合法JSON,但这种做法会破坏JSON的标准解析规则,可能导致其他正常JSON接口解析出问题,所以除非万不得已,不建议这么做。如果一定要试,需要给Jackson开启允许缺失包裹引号的特性(注意该特性从Jackson 2.10版本开始支持):

MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jacksonConverter.getObjectMapper();
objectMapper.enable(JsonParser.Feature.ALLOW_MISSING_ENCLOSING_QUOTES);
restTemplate.getMessageConverters().replaceAll(converter -> 
    converter instanceof MappingJackson2HttpMessageConverter ? jacksonConverter : converter
);

再次提醒:这个方法会让Jackson解析非标准JSON,可能引入其他潜在问题,谨慎使用。

内容的提问来源于stack exchange,提问作者bluelurker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:57:45