Js把Json序列化为Java接受的对象。
服务器端
Java定义
data class role(var name: String = "", var remark: String = "") data class user(var name: String = "", var roles: Array<role> = arrayOf()) data class corp(var name: String = "", var users: Array<user> = arrayOf()); @PostMapping(value = "hi") fun hiPost(qm: corp, session: HttpSession): String {}
Java接受的格式,Kotlin Test
@Test fun testHi() { var map = JsonMap(); map["name"] = "金维度"; map["users[0].name"] = "张三"; map["users[0].roles[0].name"] = "销售"; map["users[0].roles[0].remark"] = "销售角色"; map["users[0].f"] = "王大,王二"; map["users[1].name"] = "本四"; map["users[1].roles[0].name"] = "开发"; map["users[1].roles[0].remark"] = "开发角色"; map["users[1].roles[1].name"] = "UI"; map["users[1].roles[1].remark"] = "设计师"; // map["createAt"] = 1492762310797; var result = mvc!!.perform( MockMvcRequestBuilders.post("/hi") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) .content(URLEncodedUtils.format(map.ToNameValuePairs(), Charset.defaultCharset())) ) .andDo(MockMvcResultHandlers.print()) .andReturn(); Assert.assertEquals(result.response.status, 200); println(result); }
客户端需要PostBody内容:
name=%E9%87%91%E7%BB%B4%E5%BA%A6&users%5B0%5D.name=%E5%BC%A0%E4%B8%89&users%5B0%5D.roles%5B0%5D.name=%E9%94%80%E5%94%AE&users%5B0%5D.roles%5B0%5D.remark=%E9%94%80%E5%94%AE%E8%A7%92%E8%89%B2&users%5B1%5D.name=%E6%9C%AC%E5%9B%9B&users%5B1%5D.roles%5B0%5D.name=%E5%BC%80%E5%8F%91&users%5B1%5D.roles%5B0%5D.remark=%E5%BC%80%E5%8F%91%E8%A7%92%E8%89%B2&users%5B1%5D.roles%5B1%5D.name=UI&users%5B1%5D.roles%5B1%5D.remark=%E8%AE%BE%E8%AE%A1%E5%B8%88
客户端
定义:
/**Java方式的序列化。 * @param obj */ jv.param_jmap = function (obj) { var ret = {}; Object.keys(obj).forEach(key => { var value = obj[key]; if (Array.isArray(value)) { for (var i in value) { var m = jv.param_jmap(value[i]); Object.keys(m).forEach(sk => { ret[key + "[" + i + "]." + sk] = m[sk]; }) } } else if (jv.isPlainObject(value)) { var m = jv.param_jmap(value); Object.keys(m).forEach(sk => { ret[key + "." + sk] = m[sk]; }) } else { ret[key] = value; } }) return ret; } jv.param = function (obj) { var ret = jv.param_jmap(obj); console.log(ret); return Object.keys(ret).map(it => { return encodeURIComponent(it) + "=" + encodeURIComponent(ret[it]) }).join("&"); }
测试:
var data = {name:"金维度",users: [ {name:"张三",roles:[{name:"销售",remark:"销售角色"}]}, {name:"本四",roles:[{name:"开发",remark:"开发角色"},{name:"UI",remark:"设计师"}]} ] } var url = jv.param(data);
![]() |
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2009-05-01 按钮控件