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", ""); //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对象/字符串杂谈的更多相关文章
- Content type 'application/json;charset=UTF-8' not supported异常的解决过程
首先说一下当时的场景,其实就是一个很简单的添加操作,后台传递的值是json格式的,如下图 ,后台对应的实体类, @Data @EqualsAndHashCode(callSuper = false) ...
- JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString
JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...
- json对象字符串互转
json对象字符串互转 1.Node.js中 JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json ...
- org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
最后找到我的问题,springmvc配置文件中没加 <mvc:annotation-driven/> java代码: @RequestMapping(value="/reques ...
- JS/Jquery遍历JSON对象、JSON数组、JSON数组字符串、JSON对象字符串
JS遍历JSON对象 JS遍历JSON对象 <script> var obj = { "goodsid": "01001", "goods ...
- SpringMVC @RequestBody接收Json对象字符串
其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象 ...
- org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported或其他Content type不支持处理
很久没从头到尾搭框架,今天搭的过程中,springmvc controller方法入参用@RequestBody自动绑定参数时一直提示各种 not supported 排查问题有两个解决路径: 1)使 ...
- json 对象 字符串 转换
json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj);
- asp.net json,对象,字符串的相互转换
//object 转json格式字符串 public static string ObjectToJsonString(this object obj) { return JsonConvert.Se ...
随机推荐
- Nginx 日志
原文地址:Nginx深入详解之日志 作者:scq2099yt 一.日志分类 Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx ...
- 20145312《Java程序设计》课程总结
20145312<Java程序设计>课程总结 每周读书笔记链接汇总 20145312<Java程序设计>第一周学习总结 20145312<Java程序设计>第二周学 ...
- 20135320赵瀚青LINUX第三章读书笔记
第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度 ...
- Mac中MacPorts安装和使用 MacPorts简介
MacPorts,曾经叫做DarwinPorts,是一个软件包管理系统,用来简化Mac OS X和Darwin操作系统上软件的安装.它是一个用来简化自由软件/开放源代码软件的安装的自由/开放源代码项目 ...
- heartbeat-gui
一.简介gui heartbeat的v2版本将v1中haresources配置文件使用GUI图形配置接口来配置高可用集群.更加便捷,直观. 二.准备条件和资源规划见上文http://www.cnblo ...
- codeforce 589B枚举
2017-08-25 12:00:53 writer:pprp 很简单的枚举,但是我调试了很长时间,出现各种各样的问题 /* theme:cf 589B writer:pprp declare:枚举 ...
- SecureCRT在mac下无法输入中断命令
mac下输入Ctrl +C无法中断程序,这个问题困扰了我好久,大概有很长一段时间我都是使用kill 进程的方式来代替中断: ps aux | grep python kill -9 pid 今天终于发 ...
- Python操作Memcached使用Python-memcached模块
安装Python的memcached驱动模块 pip install python-memcached 简单的操作示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/ ...
- Java线程池可用的队列
Java线程池ThreadPoolExecutor的构造器: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...
- PHP5.6版本安装redis扩展
一.php安装redis扩展 1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本 2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2 ...