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

时间:2016-05-31 10:22:51

标签: java jackson

我有这段代码:

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,这会破坏方法链接。

我是否忽略了一些显而易见的事情,或者是否无法一次性创建这样的嵌套对象?

1 个答案:

答案 0 :(得分:3)

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

所以,是的,这是一个各种各样的错误,但遗憾的是很难修复。