【问题标题】:OpenApi arrays and nested objects validationOpenApi 数组和嵌套对象验证
【发布时间】:2021-12-29 11:52:34
【问题描述】:

我正在使用 OpenApi 规范,这是生成类的代码示例:

CreateUsersRequest:
      required:
        - userIds
      type: object
      properties:
        userIds:
          uniqueItems: true
          minItems: 1
          type: array
          items:
            type: string
            format: uuid

我想禁止发送以下请求:

{
  "userIds": [
    ""
  ]
}
{
  "userIds": [
    null
  ]
}

如果我使用javax.validation,它看起来像:

@NotNull 
private List<@NotEmpty UUID> userIds;

有什么方法可以使用api.yml 文件来做同样的事情吗?

【问题讨论】:

  • 您想在哪里(在哪一侧)禁止无效输入?您是否从 Swagger UI 发送请求并且希望它拒绝与您的 OpenAPI 定义不匹配的输入?或者您想在服务器端(例如,在 Swagger Codegen 生成的服务器代码中)或中间件进行这些验证?请详细说明。不同的工具(客户端、服务器和中间件)可能支持也可能不支持此类验证。
  • 是的,我从 swagger UI 发送请求,我希望它在服务器端得到验证,如果可能的话,最好通过 javax.validation

标签: java spring openapi


【解决方案1】:

in the documentation所示:

OpenAPI 3.0 没有像 JSON Schema 中那样显式的 null 类型,但是您 可以使用nullable: true来指定值可能是null。注意 null 与空字符串 "" 不同。

为防止出现空字符串,您可以提供 pattern 正则表达式。

请尝试以下方法:

CreateUsersRequest:
      required:
        - userIds
      type: object
      properties:
        userIds:
          uniqueItems: true
          minItems: 1
          type: array
          items:
            type: string
            format: uuid
            nullable: false
            pattern: ^[a-z|\-]+$

请仔细测试代码,我意识到你使用了format: uuid,所以我对formatpattern的组合没有绝对信心。

如有必要,您可以尝试提供自己的 uuid 类型。例如:

Uuid:
    type: string
    pattern: '^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$'
    nullable: false

还有:

CreateUsersRequest:
      required:
        - userIds
      type: object
      properties:
        userIds:
          uniqueItems: true
          minItems: 1
          type: array
          items:
            $ref: "#/components/schemas/Uuid"

【讨论】:

  • 我试过这个,但不幸的是,它不起作用。我仍然可以发送两个请求而不会出现任何验证错误
  • 感谢您的反馈。我很遗憾听到它不能正常工作。拜托,你能试试不定义format: uuid吗?
  • 我用可能的解决方法更新了答案,希望对您有所帮助。
  • 感谢您的帮助。没有format: uuid,它也不能正常工作。是的,我可以创建自己的类型,但我需要使用现有的 UUID
  • 不客气,我很抱歉没有提供更多帮助。请尝试检查您的生成器配置,也许它可以为您提供一些可能有助于解决问题的选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2016-03-27
  • 1970-01-01
  • 2011-03-21
相关资源
最近更新 更多