C++请求SpringBoot的接口问题记录

19 篇文章 2 订阅

问题描述

最近忙一个小东西,遇到一个很有意思的问题,记录一下。

需求非常简单,就是java侧提供一个接口给C++侧调用。 接口按照业务规范提供出来了,在postman中请求一下,出入参都正常。

关于这个接口

请求方式为postJson方式,即:content-type=applicaion/json方式。

出参默认也是返回一个Object的对象,content-type也是application/json。

在postman中请求查看出参正常,标准的json格式。

但是C++侧调用的时候,说是有问题,出参不是标准的JSON数据,有特殊字符包裹,还抓包截图出来了,如下:

把特殊字符拿出来转义了下,就是一个十六进制的数,代表着本次返回的报文长度。 这是一种标准格式,在浏览器或者postman中都可以正常渲染为JSON格式。

使用ajax或者axios请求接口的时候,可以直接拿出参对象获取成员进行操作。

C++侧反馈说不能有这些字符,不然需要改版本,而且有点麻烦。

仔细想了想,这应该和SpringBoot框架自身有关系,因为Controller层直接返回的是Object,默认返回的就是JSON对象,使用的Content-type=application/json。 调整了下接口的出参类型为String,直接返回一个JSON.toJSONString(obj),Content-type自定调整为text/plain了。

然后C++侧反馈接口正常,抓包后看到如下:

总结

框架封装了很多细节的东西,遇到这种问题起初会觉得有点不可思议,一直都是这么对接的,怎么可能会多一些特殊字符?而且在项目中将出参打印出来也是正常的,没看到特殊字符。其实这样该是http的规范,如果Response的Content-type是application/json,body就是这样标准的格式,只不过java也好,js也好都自动处理了这些细节,让开发人员更关注业务实现。 而C++更底层,需要开发人员处理这些细节,我觉的这种问题按照标准规范C++也是可以过滤和处理的。

最后:

(1)遇到问题,先不要急于否决别人,要换个角度考虑问题,长久的固有的认知不见得是正确的或者是完善的。

(2)Response中Content-type不同,出参的实际格式是有偏差的。 并非所见即所得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值