Pact JVM closeArray

时间:2017-12-21 14:03:16

标签: pact pact-jvm

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

鉴于Json喜欢这样,怎么会 " DslPart imeiResults =新的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()之后你永远不会有任何东西?我不明白,有人能以正确的方式展示如何做到这一点的代码吗?

1 个答案:

答案 0 :(得分:0)

我猜测stringValue后的closeArray无效?

遗憾的是,在使用array函数创建数组时,它实际上是creates a new PactDslJsonArray and when closing it, there's no way for that class to know what the parent is, hence it just returns the common superclass of 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();

现在,我们知道这让人感到困惑,hence why we started working on a new DSL using Java 8's Lambda functions试图让体验变得更好。希望有所帮助。