如何在android中传递一个带有嵌套参数的RPC Json

Posted

技术标签:

【中文标题】如何在android中传递一个带有嵌套参数的RPC Json【英文标题】:How to pass in android a RPC Json with nested parameters 【发布时间】:2012-03-01 23:30:37 【问题描述】:

以这种形式传递带有嵌套参数的json的正确代码是什么

 "method":"startSession",
"params": [ "email": "testmail@test.it", 
            "password": "1234", 
            "stayLogged": "1", 
            "idClient": "android"
           ]

到接收 RPC 的网络服务 URL??

webservice 代码是

 @Webservice(paramNames = "email", "password", "stayLogged", "idClient",
public Response startSession(String email, String password, Boolean stayLogged, String idClient) throws Exception 
    boolean rC = stayLogged != null && stayLogged.booleanValue();
    UserService us = new UserService();
    User u = us.getUsersernamePassword(email, password);
    if (u == null || u.getActive() != null && !u.getActive().booleanValue()) 
        return ErrorResponse.getAccessDenied(id, logger);
    
    InfoSession is = null;
    String newKey = null;
    while (newKey == null) 
        newKey = UserService.md5(Math.random() + " " + new Date().getTime());
        if (SessionManager.get(newKey) != null) 
            newKey = null;
         else 
            is = new InfoSession(u, rC, newKey);
            if (idClient != null && idClient.toUpperCase().equals("ANDROID")) 
                is.setClient("ANDROID");
            
            SessionManager.add(newKey, is);
        
    
    logger.log(Level.INFO, "New session started: " + newKey + " - User: " + u.getEmail());
    return new Response(new InfoSessionJson(newKey, is), null, id);

【问题讨论】:

【参考方案1】:

我假设您使用的是 json-rpc 1.0,因为您的请求中没有版本指示符。

首先你缺少你的“id”,所以将它添加到请求中。

现在您可以尝试 3 种不同的方法。

1) 如果要设置名称和值对,则需要使用对象 而不是数组 []。 喜欢:

"method":"startSession",
"params":  "email": "testmail@test.it", 
            "password": "1234", 
            "stayLogged": "1", 
            "idClient": "ANDROID"
           ,
 "id":100

2) 如果您的 json 反序列化器需要数组语法 [],那么您可能必须将对象 包装在 [] 中,例如:

"method":"startSession",
"params": [ "email": "testmail@test.it", 
            "password": "1234", 
            "stayLogged": "1", 
            "idClient": "ANDROID"
           ],
  "id":101

3) 最后,您还可以尝试在数组中使用位置参数,例如:

"method":"startSession",
"params": [ "testmail@test.it", 
            "1234", 
            "1", 
            "ANDROID"
           ],
   "id":102

希望对您有所帮助。

【讨论】:

以上是关于如何在android中传递一个带有嵌套参数的RPC Json的主要内容,如果未能解决你的问题,请参考以下文章

将带有修改的字段名称和白名单验证的 SQL 语句传递给 RPC 函数。它安全且普遍吗?

在 Android 中将嵌套的 Class<MyInterface<T>> 作为参数传递

带有参数化游标的嵌套 for 循环正在插入重复记录

在 GWT-RPC 中使用嵌套枚举

如何在嵌套查询的解析器函数中传递根参数?

如何通过远程方法发送 json-rpc http post 请求并在 java 中传递加密参数