OpenAPI 3 验证错误:应匹配格式“regex”

问题描述 投票:0回答:1

我从我编写的 Jersey RestApi 代码生成了一个 openapi json 规范,我的限制之一是“LEAGUE-MEMBER”请求标头的正则表达式负向先行模式。当我像这样将 json 转换为 yaml 时。

openapi: 3.0.1
info:
  title: Justice League Delegate Admin Sheet 
  description: 'Log Record for Temp admin access to the WatchTower'
  version: v1
servers:
  - url: https://watchtower.wayne:9443
    description: Generated server url
paths:
  /ent-watchtower-auth/v3/delegate:
    get:
      tags:
        - Search
      summary: Search for a UID
      operationId: searchForUID
      parameters:
        - name: MemberID
          in: header
          required: true
          schema:
            type: string
          example: JL000000
        - name: LEAGUE-MEMBER
          in: header
          required: true
          schema:
            pattern: '^(?!(?i)\bJOKER\b).*$'
            type: string
          example: BATMAN, JON, HAWKGIRL, ORACLE, FLASH, ANYONEBUTJOKER
      responses:
        '200':
          description: The resulting Delegate History

我在 swagger.io 编辑器中收到以下验证错误:

Structural error at paths./ent-watchtower-auth/v3/delegate.get.parameters.1.schema.pattern
should match format "regex"
format: regex

对于正则表达式上的上下文,

'^(?!(?i)\bJOKER\b).*$'
基本上允许标题中除“joker”之外的任何不区分大小写的值。 (此外,转换后的 yaml 没有将模式括在单引号内,我必须稍后添加它)。当我运行并测试 RESTAPI 时,该模式按预期工作,如果值为“Joker”,则抛出 ConstraintViolation。但我无法确定编辑想表达什么。任何建议和可能的修复表示赞赏,谢谢。

更新:我已经粘贴了 openapi yaml 的 MWE,以便在 swagger 编辑器中使用

java regex jersey openapi swagger-editor
1个回答
0
投票

我们也遇到了同样的情况。规范验证器似乎无法将

(?i)
等模式标志识别为有效的正则表达式。在我们的例子中,我们通过在字段注释中单独指定模式来解决这个问题:

@Pattern(regexp = "^etc$", flags = Pattern.Flag.CASE_INSENSITIVE)

这对于我们的情况来说是可以的,但并不理想,因为它没有向规范消费者传达完整的要求。

© www.soinside.com 2019 - 2024. All rights reserved.