我从我编写的 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 编辑器中使用
我们也遇到了同样的情况。规范验证器似乎无法将
(?i)
等模式标志识别为有效的正则表达式。在我们的例子中,我们通过在字段注释中单独指定模式来解决这个问题:
@Pattern(regexp = "^etc$", flags = Pattern.Flag.CASE_INSENSITIVE)
这对于我们的情况来说是可以的,但并不理想,因为它没有向规范消费者传达完整的要求。