写在前面的话:
根据对方的文档和示例,我们使用okhttp调用对方的http接口。http head和http body都自认无误后,始终是报400错误。请求无效 (Bad request); ---出现这个请求无效报错说明请求没有进入到后台服务里;
原因可能为以下两个:1)提交数据的字段名称或者是字段类型和服务端接口的实体类不一致;提交的参数跟服务端需要的参数个数不一致,导致无法接收;
2)提交的到服务端的数据应该是json字符串类型,而发送方没有将对象转化为字符串类型,最容易错误的是发送方以key-value的形式发送。
这里先科普下post请求的Content-Type数据类型:
1)application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生
表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):BASHPOST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
首先,Content-Type 被指定为 application/x-www-form-urlencoded;
其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
2)multipart/form-data
适用于文件上传
3)application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。记得我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 J