【问题标题】:Encoding A Java Object (POJO) into a JSON String in GWT在 GWT 中将 Java 对象 (POJO) 编码为 JSON 字符串
【发布时间】:2014-05-13 15:06:07
【问题描述】:

目标

我想使用 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"]]

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

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

可怕的黑客攻击

如果我在testService 中传递String 为:

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

它有效,但显然这太可怕了。

我尝试使用 GSON 对 POJO 进行编码,但 GWT 不允许反射。我尝试使用thetransactioncompany 将对象解析为“字符串”,但在gwt.xml 文件中找不到我需要的&lt;inherits&gt;

有什么想法吗?

【问题讨论】:

    标签: java json gwt json-rpc resty-gwt


    【解决方案1】:

    试试这个

    List<List<String>> params;
    

    而不是

    Map<String, String> params;
    

    在你的Params POJO 类中。

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


    低于 JSON 字符串

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

    表示List&lt;List&lt;String&gt;&gt;,其中“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 对象发送回客户端。

    【讨论】:

    • 感谢您提供详细且布局合理的答案
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多