编码Java对象(PO​​JO)转换成JSON字符串在GWT

问题描述:

目的

我想使用JSON-RPC发送此对客户方:编码Java对象(PO​​JO)转换成JSON字符串在GWT

{"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"]]

我使用String[]尝试,但这个给我的结果是:["Planets"]

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

可怕的哈克

如果我通过在StringtestService为:

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

它的工作原理,但显然这是可怕的。

我尝试使用GSON编码POJO,但GWT不允许反射。我尝试使用thetransactioncompany来解析对象为'String',但无法弄清我需要在我的gwt.xml文件中的<inherits>

有什么想法?

Params POJO类尝试的这一个

List<List<String>> params; 

代替

Map<String, String> params; 

在这里阅读我的帖子关于How to create a POJO class structure from an JSON string


以下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对象返回给客户端。

+0

感谢您的详细和精心布置的答案 – fiz