我在pact-jvm-consumer中的closeArray有问题。
给定这样的Json,如何构造“dslPart imeiResults=new PactDslJsonBody()”-语句。
{
"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()之后永远不能有任何东西?我不明白,有人能给我们演示一下如何用正确的方法来做这件事吗?
我猜测您在closearray
后面的stringvalue
不起作用了?
遗憾的是,当使用array
函数创建数组时,它实际上创建了一个新的PactDSLJSONArray
并且在关闭它时,该类无法知道父类是什么,因此它只能返回DslPart的公共超类,这可能会引起一些混乱。需要做的是使用asbody
函数将dslpart
转换回pactdsljsonbody
。因此,您的示例应该类似于:
DslPart etaResults = new PactDslJsonBody()
.object("Car")
.integerType("Price",123)
.array("Features")
.stringValue("rain sensor")
.stringValue("cruise control")
.closeArray()
.asBody()
.stringValue("Id","6500")
.closeObject();
现在,我们知道这是令人困惑的,因此我们开始使用Java8的Lambda函数开发一个新的DSL,试图使体验更好。希望能有所帮助。