在Springfox中用“ type”:“ string”和“ format”:“ time”替换模型属性

时间:2019-01-25 15:28:16

标签: spring swagger openapi springfox

简介

在一个简单而裸露的春季靴子项目中,我有一个模型类,其类型为java.time.LocalTime
如果我运行项目,springfox会将LocalTime检测为非内置类,并将其放在definitions下。

{
  "ExampleDto": {
    "type": "object",
    "properties": {
      "time": {
        "$ref": "#/definitions/LocalTime"
      }
    }
  }
}

不是我想要的。


我真正想要的

...具有一个类型为string的属性,其自定义格式为“ time”,如下所示:

{
  "ExampleDto": {
    "type": "object",
    "properties": {
      "time": {
        "type": "string",
        "format": "time"
      }
    }
  }
}

我能想到的

如果我将AlternateTypeRule中的LocalTime添加到String,我只会得到我想要的一半。

{
  "ExampleDto": {
    "type": "object",
    "properties": {
      "time": {
        "type": "string"
      }
    }
  }
}

当然,我也尝试了很多事情,但是我从未设法设置属性的“格式”。 我发现以某种方式调用构造函数io.swagger.models.properties.StringProperty#StringProperty(java.lang.String)并以“时间”作为参数可以解决问题,但是我无法找到实现方法。

我在github上建立了一个项目来展示我的问题。 https://github.com/LorenzSchumann/springfoxshowcase

1 个答案:

答案 0 :(得分:0)

刚刚在Springfox documentation中找到了一个建议:

问:问。我们如何轻松使用Java 8类型。 LocalDateTime?

配置日期的最简单方法是通过RUN apk add --update --no-cache g++ gcc libxml2-dev libxslt-dev python-dev libffi-dev openssl-dev make RUN pip install -r requirements.txt 。如果这些是符合字符串格式的ISO 8601日期,即yyyy-MM-dd'T'HH:mm'Z'。但是,您将没有任何格式或验证信息。

将“ Date”和“ DateTime”类型正确映射到其对应的摇动类型的方法:

  • 用java.sql.Date代替“日期”类型(java.util.LocalDate,org.joda.time.LocalDate)。
  • 用java.util.Date代替“ DateTime”类型(java.util.ZonedDateTime,org.joda.time.LocalDateTime……)。

示例:

Docket#directModelSubstitute(LocalDateTime.class, String.class)

在您的情况下,它将是:

docket
  .directModelSubstitute(LocalDate.class, java.sql.Date.class)
  .directModelSubstitute(LocalDateTime.class, java.util.Date.class)

之后的输出将是:

docket.directModelSubstitute(LocalTime.class, java.util.Date.class)