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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM