jsonrpc4j:如何从服务器获取List <someobject>?

时间:2016-07-22 06:43:04

标签: java json

我正在尝试使用jsonrpc4j从我的JSON-RPC服务器获取对象AccountData列表。

这是代码:

class AccountData {
    public Integer id;
    public Double accDeposit;
    public Double accCredit;
    public String accPerson;
    public String accAddressCity;
    public String accAddressStreet;
    public String accAddressBuild;
    public String accAddressApt;
    public Date accRegDate;
    public String accPersonPassport;
    public String accPersonPhone;
    public String accPersonEmail;
    public String accComments;
    public String accLogin;
    public String accPassword;
}

public void initialize() {

    try {
        JsonRpcHttpClient client = new JsonRpcHttpClient(new URL("http://localhost:8032/api"));

        try {
            List<AccountData> accountData = Arrays.asList(client.invoke("getUserAccount", new Object[]{}, AccountData.class));

            System.out.println("Method invoked");

            if (accountData != null) {
                for (AccountData data : accountData) {
                    System.out.println("login=" + data.accLogin);
                }
            }
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

}

我得到了一个例外:

> com.googlecode.jsonrpc4j.HttpException: null
com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:166)
com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:121)
com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:132)

我的JSON-RPC服务器正确返回结果,我在python / php客户端测试过。单个结果(非数组)也可以在Java中正常工作。

2 个答案:

答案 0 :(得分:0)

您发布的JSON无效。试试http://jsonlint.com/ 你应该使用双引号而不是单引号,而且None也应该用双引号:

{
    "id": 0,
    "result": [{
        "accDeposit": 100.0,
        "accComments": "test account",
        "accPersonPassport": "FR8382",
        "accAddressStreet": "None",
        "accPersonEmail": "john@johndoe.john",
        "accPassword": "test",
        "accPersonPhone": "+70717654321",
        "id": 8,
        "accPerson": "John Doe",
        "accAddressCity": "test city",
        "accRegDate": "2016-07-11",
        "accLogin": "john",
        "accCredit": 0.0,
        "accAddressBuild": "1",
        "accAddressApt": "18"
    }],
    "jsonrpc": "2.0"
}

答案 1 :(得分:0)

使用AccountData[].class

`

try {
    JsonRpcHttpClient client = new JsonRpcHttpClient(new URL("http://localhost:8032/api"));

    try {
        List<AccountData> accountData = Arrays.asList(client.invoke(
            "getUserAccount", 
            new Object[]{}, 
            AccountData[].class
        ));

        System.out.println("Method invoked");

        if (accountData != null) {
            for (AccountData data : accountData) {
                System.out.println("login=" + data.accLogin);
            }
        }
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
} catch (MalformedURLException e) {
    e.printStackTrace();
}

`