【问题标题】:Substituting a model property with "type":"string" and "format":"time" in Springfox在Springfox中用“type”:“string”和“format”:“time”替换模型属性
【发布时间】:2019-06-19 11:10:15
【问题描述】:

简介

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

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

不是我想要的。


我真正想要的

... 是拥有一个字符串类型的属性,它具有一个名为“time”的自定义格式,如下所示:

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

我能想到什么

如果我将AlternateTypeRuleLocalTime 添加到String,我只能得到我想要的一半。

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

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

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

【问题讨论】:

    标签: spring swagger openapi springfox


    【解决方案1】:

    刚刚在Springfox documentation找到了一个接近的建议:

    问。我们如何轻松使用 Java 8 类型。本地日期时间?

    配置日期的最简单方法是通过Docket#directModelSubstitute(LocalDateTime.class, String.class)。如果这些是符合字符串格式的 ISO 8601 日期,即 yyyy-MM-dd'T'HH:mm'Z'。但是,您不会有任何格式或验证信息。

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

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

    例子:

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

    在你的情况下是:

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

    之后的输出将是:

    ...
    "properties": {
      "time": {
        "type": "string",
        "format": "date-time"
      }
    }
    ...
    

    【讨论】:

    • 非常感谢您的回答艾瓦拉斯。我利用了您的建议,发现定义与实际结果不符。当规范说日期时间(tools.ietf.org/html/rfc3339#section-5.6)时,它必须有一个实际结果没有的日期部分。
    • 这就是为什么我说这是一个 close 建议 :) 它没有完全回答问题,我什至不确定是否可以使用“时间”或“日期”格式,架构json-schema.org/understanding-json-schema/reference/…中的其他可用格式@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多