是否可以将正则表达式与 OpenApi / Swagger @RequestParam 一起使用?
Is it possible to use regular expressions with OpenApi / Swagger @RequestParam?
我想为要用 Swagger 记录的请求参数定义一个正则表达式。事实上,我想定义文件名的格式。这可能使用 Spring 中的注释(引导)吗?
这里:
@Bean
default OpenAPI customOpenApi() {
return new OpenAPI()
.info(new Info()
.title("")
.version("1.0")
.description(""))
.components(new Components()
.addParameters(
"api-version", new io.swagger.v3.oas.models.parameters.Parameter()
.name("api-version")
.required(Boolean.TRUE)
.allowEmptyValue(Boolean.FALSE)
.description("")
.in("header")
.schema(new io.swagger.v3.oas.models.media.Schema<String>().type("string").example("1.0.0"))
)
.addParameters(
"file-name", new io.swagger.v3.oas.models.parameters.Parameter()
.name("file-name")
.required(Boolean.TRUE)
.allowEmptyValue(Boolean.TRUE)
.description("Filename of the file to be imported in the following format: " +
"<ul>" +
" <li><b>yyyyMMdd_DocumentType_senderID_rexeiverID_xxx_version.xml</b></li>" +
"</ul>")
.in("header")
.schema(new io.swagger.v3.oas.models.media.Schema<Integer>().type("string").example("20210228_A14_123456789_987654321_xxx_123.xml"))
)
);
}
或此处:
ResponseEntity<ResponseBody> postData(
@RequestHeader HttpHeaders headers,
@RequestAttribute(name = REQUST_ID, required = false) String requestId,
@Parameter(name = API_VERSION_HEADER_PARAMETER) @RequestHeader(name = API_VERSION_HEADER_PARAMETER) String apiVersion,
@Parameter(name = FILENAME_HEADER_PARAMETER) @RequestHeader(name = FILENAME_HEADER_PARAMETER) String fileName,
@Validated @RequestBody RestRequestBody body
);
我假设您使用的是 OpenAPI 3
您可以使用这样的模式:
ssn:
type: string
pattern: '^\d{3}-\d{2}-\d{4}$'
来源:https://swagger.io/docs/specification/data-models/data-types/#pattern
在代码中看起来像这样:
ResponseEntity<Order> getOrderById(@Pattern(regexp="^\d{3}-\d{2}-\d{4}$") @ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathVariable("orderId") String orderId);
我想为要用 Swagger 记录的请求参数定义一个正则表达式。事实上,我想定义文件名的格式。这可能使用 Spring 中的注释(引导)吗?
这里:
@Bean
default OpenAPI customOpenApi() {
return new OpenAPI()
.info(new Info()
.title("")
.version("1.0")
.description(""))
.components(new Components()
.addParameters(
"api-version", new io.swagger.v3.oas.models.parameters.Parameter()
.name("api-version")
.required(Boolean.TRUE)
.allowEmptyValue(Boolean.FALSE)
.description("")
.in("header")
.schema(new io.swagger.v3.oas.models.media.Schema<String>().type("string").example("1.0.0"))
)
.addParameters(
"file-name", new io.swagger.v3.oas.models.parameters.Parameter()
.name("file-name")
.required(Boolean.TRUE)
.allowEmptyValue(Boolean.TRUE)
.description("Filename of the file to be imported in the following format: " +
"<ul>" +
" <li><b>yyyyMMdd_DocumentType_senderID_rexeiverID_xxx_version.xml</b></li>" +
"</ul>")
.in("header")
.schema(new io.swagger.v3.oas.models.media.Schema<Integer>().type("string").example("20210228_A14_123456789_987654321_xxx_123.xml"))
)
);
}
或此处:
ResponseEntity<ResponseBody> postData(
@RequestHeader HttpHeaders headers,
@RequestAttribute(name = REQUST_ID, required = false) String requestId,
@Parameter(name = API_VERSION_HEADER_PARAMETER) @RequestHeader(name = API_VERSION_HEADER_PARAMETER) String apiVersion,
@Parameter(name = FILENAME_HEADER_PARAMETER) @RequestHeader(name = FILENAME_HEADER_PARAMETER) String fileName,
@Validated @RequestBody RestRequestBody body
);
我假设您使用的是 OpenAPI 3
您可以使用这样的模式:
ssn:
type: string
pattern: '^\d{3}-\d{2}-\d{4}$'
来源:https://swagger.io/docs/specification/data-models/data-types/#pattern
在代码中看起来像这样:
ResponseEntity<Order> getOrderById(@Pattern(regexp="^\d{3}-\d{2}-\d{4}$") @ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathVariable("orderId") String orderId);