这几天在对接项目另一个乙方的下行接口,因为最近一直用php开发,所以当那边接口文档上规定了接口传参类型的

时候,瞬间搞混了,但是这次的出错也让我对http的数据传输有了新的认知。

1.http的数据传输类型

“HTTP是一个文本协议,从编程的角度来看传输的是字符串,所以它是以字符流的形式来传输的。”

当时看到接口文档上写了参数类型有两种有String、Double,于是我在传参的时候,将接口所需的String型字符串用双引

号引起来了,然后根据当时接口的返回值来看,双引号包起来的参数值和接口那边校验的参数值(没有引号的)校验不通

过。

实际上呢,我这边传参的时候不用理会接口文档上的数据类型,因为http传过去的都是字符串,你写个888,传过去也是字

符串,服务端(java?tomcat?)用的时候要转int,但是我最近一直写php,印象中没有将数值型参数(字符串)转int这一

步。

后来,将传递的参数(规定的String类型)的双引号去掉之后,验证通过了。

2.java接口的返回值问题

还是那个问题,最近一直写php,接口返回json的时候用到了

exit(json_encode(array('data'=>$data)));

另一方面,很久之前写java接口的时候,顺便这里有篇之前的博客讲java接口的:https://www.cnblogs.com/eco-just/p/8490972.html

我记得当时总是这样返回数据:

User user = new User("eco", "");           //java对象
JSONObject json = JSONObject.fromObject(user); //转为json对象
String jsonstr = json.toString(); //转为json字符串

然后前端ajax调用的时候,总会执行这样一个操作:

<script type="text/javascript">
$.ajax({
type: "Get",
url: "servlet/JJJJ",
data:{username:"eco",password:""},
success: function(data){
var a = JSON.parse(data); //json字符串转对象
$("#json").text(a.username);
}
})
</script>

但是刚才百度找到一个博客中是这样返回数据的:

JSONObject jsonObj = JSONObject.fromObject(user);
System.out.println(jsonObj);//{"password":"1234","username":"cxl"}
response.getWriter().print(jsonObj);

可以看出他这里直接返回的是json对象,没有我之前将json对象转字符串那一步,这是我以前写java接口没有注意到的。

3.Content-type

Content-type定义于请求头或响应头中,规定了请求体/响应体的解析方式。

但往往有的时候,我们发起请求的时候不需要定义请求头的Content-type,因为大多数服务器会根据请求体的数据类型

自动识别Content-type,

但有的时候就会出现意外的情况,有的服务器强行规定了请求的Content-type,所以对于postman请求时候的Content-type

如果不符合对方接口规定的Content-type,那么将直接导致请求失败。

我们进行http请求传参的时候,都是以key-value的形式,只是有的时候,可以在这个key上做点小文章:

key value
data[0][name] jack
data[0][age] 24
data[1][name] tom
data[1][age] 25

传参的时候,我们是以上面的key-value形式传参的,经过服务端解析之后,data就成了一个数组,一个拥有两个元素(对象)

的数组,

有的时候,对方接口规范可能不是根据这样的key-value形式解析,而是解析json串,像下面这样:

key value
data [{"name":"jack","age":24},{"name":"tom","age":25}]

效果都是一样的,只是第二种可能服务端需要对拿到的json字符串串解析成json对象。

Content-type与json对象/字符串杂谈的更多相关文章

  1. Content type 'application/json;charset=UTF-8' not supported异常的解决过程

    首先说一下当时的场景,其实就是一个很简单的添加操作,后台传递的值是json格式的,如下图 ,后台对应的实体类, @Data @EqualsAndHashCode(callSuper = false) ...

  2. JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString

    JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...

  3. json对象字符串互转

    json对象字符串互转 1.Node.js中 JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json ...

  4. org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported

    最后找到我的问题,springmvc配置文件中没加 <mvc:annotation-driven/> java代码: @RequestMapping(value="/reques ...

  5. JS/Jquery遍历JSON对象、JSON数组、JSON数组字符串、JSON对象字符串

    JS遍历JSON对象 JS遍历JSON对象 <script> var obj = { "goodsid": "01001", "goods ...

  6. SpringMVC @RequestBody接收Json对象字符串

    其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象 ...

  7. org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported或其他Content type不支持处理

    很久没从头到尾搭框架,今天搭的过程中,springmvc controller方法入参用@RequestBody自动绑定参数时一直提示各种 not supported 排查问题有两个解决路径: 1)使 ...

  8. json 对象 字符串 转换

    json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj);

  9. asp.net json,对象,字符串的相互转换

    //object 转json格式字符串 public static string ObjectToJsonString(this object obj) { return JsonConvert.Se ...

随机推荐

  1. mybatis家族

    mybatis 优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射. 备注:通过mapper实现数据库与实体类相互映射 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果 ...

  2. vs LNK2019 无法解析的外部符号 ***,该符号在函数 WinMain 中被引用

    一般链接错误都是因为包含头文件与lib库不匹配(无导出函数.lib库的release debug版本混乱.库引用的优先级.编译器设置mt/mtd等等)造成的. 错误    LNK2019    无法解 ...

  3. was控制台英文改成中文

    在安装was的时候没有选中简体中文包,所以导致安装后的was控制台显示中文,但是没关系,我们还是通过界面配置来修改,使得控制台从英文变为中文 1.vnc远程到服务器2./opt/IBM/Install ...

  4. tornado之WebSocket

    WebSocket WebSocket是HTML5规范中新提出的客户端-服务器通讯协议,协议本身使用新的ws://URL格式. WebSocket 是独立的.创建在 TCP 上的协议,和 HTTP 的 ...

  5. Linux环境下的CPU消耗分析

    在Linux系统中, CPU 主要用于中断,内核以及用户进程的任务处理,优先级为 中断 > 内核 > 用户进程.在CPU消耗分析中,我们还经常遇到下面几个概念. 上下文切换         ...

  6. 【Network Architecture】Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning(转)

    文章来源: https://www.cnblogs.com/shouhuxianjian/p/7786760.html Feature Extractor[Inception v4] 0. 背景 随着 ...

  7. CBT怎样进行注册

    CBT币未来升值千倍?揭秘为何比特云币注册认证送矿机? 比特云币先机先机,1月6号准备启动,虚拟货币新宠云比特(Cloud Bit 简称CBT)将于近日强势登陆交易市场.这款由全球最大的比特矿工联盟发 ...

  8. 分享几道Java线程面试题

    不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程 ...

  9. spring mvc: 属性方法名称解析器(多动作控制器)MultiActionController/ControllerClassNameHandlerMapping/PropertiesMethodNameResolver

    spring mvc: 属性方法名称解析器(多动作控制器) 加入控制器是StudentContrller.java,里面有3个方法 index,add,remove 那么访问地址是: http://l ...

  10. 在接口请求时报错Unrecognized field &quot;zZF1&quot

    这个问题是json序列化问题,当参数中出现大写字母组成的字段时(例如:ZZF1),此时需在字段上加入注解:@JsonProperty(value = "ZZF1")