Spring Boot订单支付微服务调用RestTemplate出现JSON解析错误如何解决
问题原因与解决方案
这个报错是JSON反序列化失败导致的:订单服务调用支付接口后,收到的返回内容不是标准JSON格式,无法映射为你定义的Payment类,触发异常后事务回滚,因此订单数据没有写入数据库。而支付服务已经完成了请求处理逻辑,所以支付数据可以正常入库。
具体排查与修复步骤
- 第一步:先验证支付接口的返回格式
单独用Postman调用POSThttp://localhost:8082/api/payment接口,传入Payment参数,确认两个点:- 响应头的
Content-Type是否为application/json - 响应体是否是标准JSON结构,是否存在直接返回
Payment xxx这类纯文本内容的情况
- 响应头的
- 第二步:修复支付服务接口返回逻辑
确保支付服务的/api/payment接口添加了@ResponseBody注解(或Controller类标注了@RestController),且返回值类型为Payment对象,Spring会自动将返回对象序列化为标准JSON格式。 - 第三步:临时调试确认返回内容
可以先将RestTemplate调用的返回类型改为String,打印原始返回值确认异常来源:// 临时调试代码,替换原有postForObject调用 String rawResponse = restTemplate.postForObject("http://localhost:8082/api/payment", payment, String.class); System.out.println("支付接口原始返回:" + rawResponse); // 确认返回格式正确后,再改回Payment.class接收即可 - 第四步:确认RestTemplate配置
确保项目中引入了Jackson依赖(Spring Boot默认的web starter已经包含),RestTemplate默认加载了MappingJackson2HttpMessageConverter可正常处理JSON反序列化。
内容的提问来源于stack exchange,提问作者Ahmed Hosny
相关产品推荐
相关产品推荐

