我在合同中定义了查询参数。我需要这个参数是可选的:
method 'GET'
url($(regex(urlRegex))) {
queryParameters {
parameter 'fitler': $(stub(regex(filterRegex)))
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这个合同适用于带有过滤器的 URL/my/sample/url?fitler=some-filter-expression和不带过滤器参数的URL /my/sample/url。
我怎样才能做到这一点?这甚至可能吗?
我想用 PHP 计算大文件的 SHA256。目前,我正在使用 Amazon Glacier 来存储旧文件及其 API 来上传存档。最初,我只是使用无法达到 MB 大小图像的小文件。当我尝试上传超过 1MB 的文件时,API 响应说我给他们的校验和与他们计算的不同。
\n\n这是我上传文件的代码:
\n\n//get the sha256 using the file path\n$image = //image path;\n$sha256 = hash_file("sha256", $image);\n\n$archive = $glacier->uploadArchive([\n \'accountId\' => \'\', \n \'body\' => "",\n \'checksum\' => $sha256,\n \'contentSHA256\' => $sha256,\n \'sourceFile\' => $image,\n \'vaultName\' => \'my-vault\'\n ]);\nRun Code Online (Sandbox Code Playgroud)\n\n和错误:
\n\nAWS HTTP error: Client error: `POST https://glacier.us-west-2.amazonaws.com/vaults/70/archives` resulted in a `400 Bad Request` response:{"code":"InvalidParameterValueException","message":"Checksum mismatch: expected 9f1d4da29b6ec24abde48cb65cc32652ff589467 (truncated...)\n
我尝试了如下函数来检查最终的哈希值,但当我打印它时,它似乎不是正确的哈希值:
\n\nprivate function getFinalHash($file)\n{\n $fp …Run Code Online (Sandbox Code Playgroud) 我在 Swagger V2.0 中有一个 API 规范的请求正文,如下所示。
"/uri/path":
...
parameters:
- in: body
...
schema:
$ref: '#/definitions/StatusObject'
definitions:
StatusObject:
status:
$ref: '#/definitions/StatusEnum'
StatusEnum:
type: string
enum: ['ALPHA', 'BRAVO', 'UNKNOWN']
Run Code Online (Sandbox Code Playgroud)
现在,如果客户端未设置该值,我希望StatusObject.status获得默认值。UNKNOWN我试图按如下方式实现这一目标,但没有运气。
"/uri/path":
...
parameters:
- in: body
...
schema:
$ref: '#/definitions/StatusObject'
definitions:
StatusObject:
status:
$ref: '#/definitions/StatusEnum'
default: 'UNKNOWN'
StatusEnum:
type: string
enum: ['ALPHA', 'BRAVO', 'UNKNOWN']
Run Code Online (Sandbox Code Playgroud)
我也尝试过,'#/definitions/StatusEnum.UNKNOWN'但还是不行。也梳理了文档,但找不到进一步的内容。我缺少什么?
我想要实现的是为此属性设置默认值status。当枚举按如下方式定义时,此方法有效。
"/uri/path":
...
parameters:
- in: body
...
schema:
$ref: '#/definitions/StatusObject'
definitions:
StatusObject:
status:
type: string
enum: …Run Code Online (Sandbox Code Playgroud) 我有一个集合,我想对其执行聚合并将结果放入同一数据库中的单独集合中。在仔细检查文档时,我偶然发现$merge哪个完全按照我想要的方式工作。我想出了以下 mongo shell 管道,它运行完美。
db.getCollection('SOURCE_COLLECTION').aggregate([
{
"$match": {type: 'ABC'}
},
{
"$merge": {
"into": "OUTPUT_COLLECTION",
"whenMatched": "replace"
}
}
])
Run Code Online (Sandbox Code Playgroud)
现在,我需要在 Spring boot 中达到相同的效果,为此我想出了以下内容,理论上应该没有什么不同。
final ArrayList<Document> pipeline = new ArrayList<>();
pipeline.add(Document.parse("{$match: {type: 'ABC'}}"));
pipeline.add(Document.parse("{$merge: {into: 'OUTPUT_COLLECTION', whenMatched: 'replace'}}"));
mongoTemplate.getDb()
.getCollection("SOURCE_COLLECTTION", Document.class)
.aggregate(pipeline);
Run Code Online (Sandbox Code Playgroud)
尽管如此,这不起作用。可以看出,我正在使用以 a作为管道的MongoCollection<T>.aggregate()方法。List<Document>管道中的每个阶段都是通过将 JSON 字符串解析为文档来生成的。
有趣的是,当我用 替换 merge 时$out,它的工作没有任何问题。
final ArrayList<Document> pipeline = new ArrayList<>();
pipeline.add(Document.parse("{$match: {type: 'ABC'}}"));
pipeline.add(Document.parse("{$out: 'OUTPUT_COLLECTION'}"));
mongoTemplate.getDb()
.getCollection("SOURCE_COLLECTTION", Document.class)
.aggregate(pipeline);
Run Code Online (Sandbox Code Playgroud)
但这对我来说没有好处,因为这个聚合将被执行多次(实际上我试图在这里填充一个集合的物化视图类型)。我需要$merge工作,但事实并非如此。我缺少什么?有人可以看到我看不到的东西吗?