小编Rom*_*rra的帖子

如何指定可选的查询参数

我在合同中定义了查询参数。我需要这个参数是可选的:

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

我怎样才能做到这一点?这甚至可能吗?

java wiremock spring-cloud-contract

7
推荐指数
1
解决办法
1636
查看次数

如何在php中计算大文件的SHA256

我想用 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    ]);\n
Run Code Online (Sandbox Code Playgroud)\n\n

和错误:

\n\n

AWS 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\n

我尝试了如下函数来检查最终的哈希值,但当我打印它时,它似乎不是正确的哈希值:

\n\n
private function getFinalHash($file)\n{\n    $fp …
Run Code Online (Sandbox Code Playgroud)

php hash sha256

5
推荐指数
1
解决办法
5944
查看次数

开放 API 规范 V2.0 - Enum 类型字段的默认值

我在 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)

enums default swagger spring-boot openapi-generator

3
推荐指数
1
解决办法
9083
查看次数

在基于文档的聚合管道中使用 $merge 不起作用

我有一个集合,我想对其执行聚合并将结果放入同一数据库中的单独集合中。在仔细检查文档时,我偶然发现$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工作,但事实并非如此。我缺少什么?有人可以看到我看不到的东西吗?

java aggregation mongodb spring-boot

3
推荐指数
1
解决办法
974
查看次数