Как передать в андроид RPC Json с вложенными параметрами - PullRequest
3 голосов
/ 02 марта 2012

Какой правильный код для передачи JSON с вложенными параметрами в этой форме

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

на URL веб-сервиса, который получает RPC ??

код веб-сервиса

 @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 Ответ

2 голосов
/ 05 мая 2012

Я предполагаю, что вы используете json-rpc 1.0, поскольку в вашем запросе нет индикатора версии.

Сначала вы пропустили свой "идентификатор", поэтому добавьте это в запрос.

Теперь есть 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
}

Надеюсь, это поможет.

...