【问题标题】:Using Apache Commons Digester with JSON使用带有 JSON 的 Apache Commons Digester
【发布时间】:2017-07-05 21:00:10
【问题描述】:

我正在编写一个扩展类的类,该类使用 Digester 来解析来自 API 的 XML 响应(例如 existing class,下面的代码片段)。收到响应后,代码会创建一个对象并在其上添加特定的方法。

为简洁而编辑的代码 sn-p:

      private Digester createDigester() {
        Digester digester = new Digester();

        digester.addObjectCreate("GeocodeResponse/result", GoogleGeocoderResult.class);
        digester.addObjectCreate("GeocodeResponse/result/address_component", GoogleAddressComponent.class);
        digester.addCallMethod("GeocodeResponse/result/address_component/long_name", "setLongName", 0);
...
        digester.addSetNext("GeocodeResponse/result/address_component", "addAddressComponent");

        Class<?>[] dType = {Double.class};
        digester.addCallMethod("GeocodeResponse/result/formatted_address", "setFormattedAddress", 0);
...
        digester.addSetNext("GeocodeResponse/result", "add");
        return digester;
      }
    }

但是,我将调用的 API 仅支持 JSON。我找到了一个可能的solution,它涉及将 JSON 转换为 XML,然后通过 Digester 运行它,但这似乎非常骇人听闻。

public JsonDigester(final String customRootElementName) {
    super(new JsonXMLReader(customRootElementName));
  }

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java apache-commons apache-commons-digester


    【解决方案1】:

    该类专门用于根据文档处理 XML:

    基本上,Digester 包允许您配置 XML -> Java 对象映射模块,它触发称为规则的某些操作 每当识别出嵌套 XML 元素的特定模式时。一个 丰富的预定义规则可供您使用,或者您可以 也可以创建自己的。

    您为什么认为它可以与 JSON 一起使用?

    【讨论】:

    • 是的,这就是问题所在。接受 JSON 编码的对象有没有更简单的方法?我正在扩展类的抽象似乎依赖于 Digester。
    • 是的,有一种不那么老套的方法,可以根据需要使用 XML 开头,也可以不使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多