最近用http+post方式实现了系统间数据交互的需求.
常用的方式是 application/json方式直接post json对象
如
{"siteId":"ZHAN20160329TDLXJND144649","apiSecret":"userid123","workNumber":"FJ-8006-160912-1715-00001","fluetype":"2","apiKey":"yyxt"}
后台可以直接springmvc直接接收并转为相关vo对象处理.
而在手机与后台交互的场景中遇到一种格式要求
方法名称:appScanBuildingData
请求:json字符串形式,最外层用data包裹
demo格式范例是
data={"alarmDetail":[{"address":"中国","cgi":"CGI0"},{"address":"米国","cgi":"CGI1"},{"address":"日本","cgi":"CGI2"}],"areaCode":"350723","cellNumber":"1599999","cityCode":"350723","lat":"232.545","lon":"98.233","workNO":"ZB33000333337"}
这种数据需要怎么生成的?
以下说明主要参考https://imququ.com/post/four-ways-to-post-data-in-http.html
这种奇葩的格式要求其实使用的Content-Type: 应该为application/x-www-form-urlencoded;
提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码.
POST 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
当以application/json的content-type传送数据,被传送的对象只需被json序列化。当以application/x-www-form-urlencoded的方式传送数据。
请求的内容需要以..=..&..=..的格式提交,在请求体内内容将会自动以”&”和“ = ”进行拆分。
application/x-www-form-urlencoded方式传输,后台接收时候可以采用
String data = request.getParameter("data"); 这样的方式来接受json格式的数据.
然后在转为Object使用:
AlarmInfo vo=null;
vo=JSONObject.parseObject(data, AlarmInfo.class);
约定这种格式的初衷估计就是后台为接收数据方便的考虑.
时间: 2024-11-08 06:50:01