OpenApi java.time.Duration 默认格式

alt*_*vic 7 java openapi springdoc

我正在使用 springdoc 生成我的 OpenAPI 文档。

public class MyDto {
    ....
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Duration duration;
    ....
}
Run Code Online (Sandbox Code Playgroud)

OpenApi 显示的定义MyDto如下,持续时间被反序列化为类似以下内容:

"duration": {
    "seconds": 0,
    "nano": 0,
    "negative": true,
    "zero": true,
    "units": [
      {
        "dateBased": true,
        "timeBased": true,
        "duration": {
          "seconds": 0,
          "nano": 0,
          "negative": true,
          "zero": true
        },
        "durationEstimated": true
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

我希望将其格式化为字符串,而不必添加@Schema(type = "string", format = "duration")到每个字段java.util.Duration的所有 DTO 中Duration

jackson-datatype-jsr310的类路径和序列化/反序列化负载按预期使用ISO 8601格式的字符串工作,除了 OpenAPI 显示错误的格式。

是否有可能以某种方式告诉 OpenAPIjava.util.Duration默认情况下将其视为字符串?

alt*_*vic 2

我自己设法解决了这个问题。如果其他人也有同样的问题,这里是一个配置示例:

@Configuration
class SpringDocConfiguration implements InitializingBean
{
    @Override
    public void afterPropertiesSet()
    {
        SpringDocUtils.getConfig().replaceWithSchema(Duration.class, new StringSchema().example("PT10S"));
    }
}
Run Code Online (Sandbox Code Playgroud)