2

我在 pact-jvm-consumer 中遇到 closeArray 问题。

给定这样的 Json,如何构造“DslPart imeiResults = new PactDslJsonBody()”-statment。

{ 
   "Car": {
     "Price": 123,     
     "Features": [
         "rain sensor",
         "cruise control"
     ],
     "Id": "6500"
   }
}

我试过这样:

    DslPart etaResults = new PactDslJsonBody()
           .object("Car")
                .integerType("Price",123)
                .array("Features")
                    .stringValue("rain sensor")
                    .stringValue("cruise control")
                .closeArray()
                .stringValue("Id","6500")
            .closeObject()
            .asBody();

但这不起作用,例如 .closeArray() 不返回 PactDslJsonBody 而是 DslPart,所以在 .closeArray() 之后你永远不能拥有任何东西?我不明白,有人可以显示如何正确执行此操作的代码吗?

4

1 回答 1

1

我猜你的stringValueaftercloseArray不起作用?

可悲的是,当使用该函数创建数组时array,它实际上创建了一个新数组PactDslJsonArray,当关闭它时,该类无法知道父类是什么,因此它只返回 DslPart 的公共超类,这可能会引起一些混乱。需要做的是将其DslPart转换回PactDslJsonBody使用asBody函数。所以,你的例子应该是这样的:

DslPart etaResults = new PactDslJsonBody()
   .object("Car")
        .integerType("Price",123)
        .array("Features")
            .stringValue("rain sensor")
            .stringValue("cruise control")
        .closeArray()
        .asBody()
        .stringValue("Id","6500")
    .closeObject();

现在,我们知道这很令人困惑,因此我们开始使用 Java 8 的 Lambda 函数开发新的 DSL以尝试改善体验。希望有帮助。

于 2017-12-22T00:02:18.380 回答