0

客观的

我想使用 JSON-RPC 在客户端发送这个:

{"jsonrpc":"2.0","method":"RegisterValues","params":[["Planets","Stars"]],"id":2}

我的尝试

使用 Resty-GWT:

public interface testService extends RestService {

    @Produces("application/json")
    @POST
    public void myCall(Params myparams, MethodCallback<Response> callback );

    public class Params {
          String jsonrpc = "2.0";
          String method;
          //String[] params;
          Map<String, String> params;
          int id;

          public void setId(int id){
              this.id = id;
          }

          public void setMethod(String method){
              this.method = method;
          }
                          }

          public void setParams(Map<String, String> params){
              this.params = params;
          }

        }

当我在另一个类中调用 Params 对象(设置调用)时,执行以下操作:

Map<Integer, String> myParams = new HashMap<Integer, String>(); 
myParams.put(0, "Planets");
myParams.setParams(myParams);

显然,这会像这样发送它:

{"jsonrpc":"2.0", "method":"RegisterValues", "params":{"0":"Planets"}, "id":0}

我不知道如何获得这些魔法:[["Planets"]]

我尝试使用 aString[]但这给了我结果:["Planets"]

String[][]给出它尚不支持的错误。

可怕的黑客

String如果我在我的 as 中传递 a testService

String myparams = "{\"jsonrpc\":\"2.0\",\"method\":\"RegisterValues\",\"params\":[[\"FPlanets\"]],\"id\":2}";

它有效,但显然这很可怕。

我尝试使用 GSON 对 POJO 进行编码,但 GWT 不允许反射。我尝试使用thetransactioncompany将对象解析为“字符串”,但无法确定<inherits>我在gwt.xml文件中需要的内容。

有什么想法吗?

4

1 回答 1

1

试试这个

List<List<String>> params;

代替

Map<String, String> params;

在您的ParamsPOJO 课程中。

在此处阅读我关于如何从 JSON 字符串创建 POJO 类结构的文章。


低于 JSON 字符串

"params":[["Planets","Stars"]]

表示List<List<String>>其中“params”是 POJO 中的变量名。

POJO:

class Params implements Serializable {
    private String jsonrpc;
    private String method;
    private int id;
    private List<List<String>> params;
    ...
   //getter/setter
   //default constructor
}

在服务器端试试这个

String myparams = "{\"jsonrpc\":\"2.0\",\"method\":\"RegisterValues\",\"params\":[[\"FPlanets\"]],\"id\":2}";
Params params=gson.fromJson(myparams,Params.class);
System.out.println(params.params+"-"+params.id);

Params对象发送回客户端。

于 2014-04-02T11:46:12.777 回答