【问题标题】:Is it possible to use regular expressions with OpenApi / Swagger @RequestParam?是否可以将正则表达式与 OpenApi / Swagger @RequestParam 一起使用?
【发布时间】:2021-08-13 08:49:23
【问题描述】:

我想为要使用 Swagger 记录的请求参数定义正则表达式。实际上我想定义文件名的格式。我可以在 Spring(Boot)中使用 Annotations 吗?
这里:

   @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
    );

【问题讨论】:

  • Schema 具有 pattern 属性。

标签: regex spring-boot swagger openapi


【解决方案1】:

我假设您使用 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);

【讨论】:

  • 是的,OpenApi 3.1。我的错:我正在寻找一种使用 Java 注释在代码优先的方法中定义它的方法。
  • 绝对完美,西蒙。非常感谢。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2016-12-29
  • 2011-06-19
  • 2012-06-23
相关资源
最近更新 更多