我在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()之后你永远不会有任何东西?我不明白,有人能以正确的方式展示如何做到这一点的代码吗?
答案 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试图让体验变得更好。希望有所帮助。