java 使用Swagger表示ISO 8601年-月日期文档

s8vozzvw  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(178)

如何让Swagger核心生成以String表示的Year-Month字段的openapi.json文档?
在代码中,我已经尝试了@JsonFormat@JsonbDateFormat
返回的实体被正确地表示为字符串,具有正确的格式,但文档始终被生成为Object。
环境:

  • io.swagger.core.v3.swagger-jaxrs2 2.1.9
  • wildfly 21.0.2
  • Java 11

这里是一个片段:

@JsonbDateFormat(value = "uuuu-MM") // or "yyyy-MM", or @JsonFormat(shape = Shape.STRING, pattern = "uuuu-MM")
private YearMonth reference;

实体返回:

{
    "reference": "2020-11",
}

生成的文件:

{
  "openapi" : "3.0.1",
  ...
  "components" : {
    "schemas" : {
      "Entity" : {
        "type" : "object",
        "properties" : {
          "reference" : {
            "type" : "object",
            "properties" : {
              "year" : {
                "type" : "integer",
                "format" : "int32"
              },
              "month" : {
                "type" : "string",
                "enum" : [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ]
              },
              "monthValue" : {
                "type" : "integer",
                "format" : "int32"
              },
              "leapYear" : {
                "type" : "boolean"
              }
            }
          }
        }
      }
    }
  }
}
jtw3ybtb

jtw3ybtb1#

显然Swagger核心不使用@JsonFormat@JsonbDateFormat作为格式化模板的源代码,它只使用属性类型,但它没有默认的YearMonth类型。
因此,可以使用Swagger Annotation @Schema定义数据表示。
在这一特定情况下:@Schema(type = "string", format = "yearmonth", example = "2020-07")
此外,要使用默认的自定义模式,请参见How to set a default custom schema for types in Swagger

相关问题