使用 Jackson 的 ObjectNode.putObject 进行方法链接

2024-04-02

我有这个代码:

static String createRequestJson(String apiKey, String apiSecret) {
  JsonNodeFactory factory = JsonNodeFactory.instance;
  ObjectNode root = factory.objectNode();
  root.set("auth", factory.objectNode()
      .put("api_key", apiKey)
      .put("api_secret", apiSecret));
  root.put("wait", true);
  return root.toString();
}

它可以工作,但代码看起来比必要的更复杂。特别是,我想摆脱root多变的。

static String createRequestJson(String apiKey, String apiSecret) {
  JsonNodeFactory factory = JsonNodeFactory.instance;
  return factory.objectNode()
      .set("auth", factory.objectNode()
          .put("api_key", apiKey)
          .put("api_secret", apiSecret))
      .put("wait", true) // Compile error: JsonNode.put(String, boolean) undefined
      .toString();
}

问题是set方法不返回ObjectNode但只有一个JsonNode,这打破了方法链。

我是否忽略了一些明显的事情,或者是否不可能一次性创建这样的嵌套对象?


这是方法签名中的一个不幸的缺陷,但不幸的是,在不破坏现有代码的情况下不可能进行更改:如果更改签名(返回类型是签名的一部分),则使用此方法的任何现有代码都将无法加载新版本杰克逊的。

所以,是的,这是一种错误,但不幸的是,这是一个很难修复的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jackson 的 ObjectNode.putObject 进行方法链接 的相关文章

随机推荐