• Content-type与json对象/字符串杂谈


    这几天在对接项目另一个乙方的下行接口,因为最近一直用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", "567568");           //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:"23423"},
                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对象。

  • 相关阅读:
    责任链模式
    状态模式
    命令模式
    策略模式
    迭代器模式
    适配器模式
    装饰模式
    合成模式
    brew php 提示
    sarafi浏览器iframe跨域cookie无效的处理方案(笨方法,看官莫笑)
  • 原文地址:https://www.cnblogs.com/eco-just/p/9411237.html
Copyright © 2020-2023  润新知