java - 如何使用 Spring Cloud Contracts 将 Stub 中的 NULL 值设置为 clientValue
问题描述
我们正在尝试将null
值设置到生产者客户端站点代码中。
Groovy 合约示例:
Contract.make {
description("Creating user")
name("Create user")
request {
method 'POST'
url '/api/user'
body(
name: $(consumer(anyNonEmptyString()), producer('John Doe')),
address: $(consumer(optional(regex(alphaNumeric()))), producer(null))
)
headers {
contentType(applicationJson())
}
}
response {
status 201
}
}
在尝试解析 Groovy 合约时,以下合约会产生断言失败:
assert testSide ==~ Pattern.compile(stubSide.optionalPattern())
| | | | |
null false | | ([a-zA-Z0-9]+)?
| ([a-zA-Z0-9]+)?
([a-zA-Z0-9]+)?
任何建议在生成的类中将其设置为 null 以获得这样的结果(或者干脆不添加该字段address
:
@Test
public void create_user() throws Exception {
// given:
MockMvcRequestSpecification request = given()
.header("Content-Type", "application/json")
.body("{\"name\":\"John Doe\",\"address\": null,");
// when:
ResponseOptions response = given().spec(request)
.post("/api/user");
// then:
assertThat(response.statusCode()).isEqualTo(201);
}
解决方案
Spring Cloud Contract 中存在一个问题,我们将可选属性视为设置为空或非空的值,但它必须存在。随着https://github.com/spring-cloud/spring-cloud-contract/issues/1257的修复,我们还增加了对null
价值的支持。
推荐阅读
- sql - 如何在纯sql中计算工作日数
- ubuntu-18.04 - 如何在 ubuntu 18.04 服务器中自动登录
- visual-studio - 如何在 Visual Studio 2019 中为窗口窗体应用程序创建 setup.exe 文件?
- php - 如何在 woocommerce 订单列表中显示客户角色列?
- json - 使用 kotlinx.serialization 解析空对象
- python - 在python中实现Fire and Forget并在等待结果之前从函数返回
- jenkins - junitxml jenkins 插件未显示通过测试的输出(PyTest)
- javascript - 为什么我离开组件并再次输入后我的模态停止工作?
- modelica - Modelica:如果在较新的库版本中更改或删除值,是否有可能在模型中保留旧的默认值?
- sql - dblink 在进程中未将一个表的表更新反映到另一个表