【问题标题】:Building JSON requests dynamically in Java在 Java 中动态构建 JSON 请求
【发布时间】:2023-03-27 15:22:01
【问题描述】:

我正在创建一个可以向服务器发送不同请求的客户端。我的部分目标是没有任何大的依赖关系。

请求可以如下所示:

{
  "method": "getUser",
  "methodParameters": {
    "a": "b",
    "c": "d",
    "e": "f",
    "data": {
      "u": "v",
      "x": "y"
    }
  },
  "version": "1.3"
}

每种请求方法的数据对象的内容都不同。 我的问题是,动态构建这些 JSON 请求的最佳“Java 方式”是什么?

到目前为止,我只提出了几个我认为不是最好的替代方案..

示例 1

只是一个普通的 POJO,带有一些 set/getter 和一个 SimpleJSON 对象。

public class MethodOne {
    JSONObject data = new JSONObject();

    private void setX(String x) {
        data.put("x", x);
    }

    private String getX() {
        return (String) data.get("x");
    }

    private void setY(String y) {
        data.put("y", y);
    }

    private String getY() {
        return (String) data.get("y");
    }
}

示例 2

public class RequestData {
    public JSONObject methodOne(String x, String y) {
        JSONObject data = new JSONObject();
        data.put("x", x);
        data.put("y", y);
        return data;
    }

    public JSONObject methodTwo(String a, String b) {
        JSONObject data = new JSONObject();
        data.put("a", a);
        data.put("b", b);
        return data;
    }
}

那你怎么看。上述任何解决方案是否更适合这项工作,还是我还没有提出第三种解决方案?谢谢。

【问题讨论】:

标签: java json


【解决方案1】:

请注意,您的示例 1 不是 POJO,而是包装的 JSONObject

GSON 可以与真正的 POJO 一起使用:

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  //setters/getters optional
}

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);

如果您需要,还有一个getAsJsonObject 方法而不是String。另请参阅https://stackoverflow.com/a/13434887/360211

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多