Swagger Codegen将“格式:时间”转换为非字符串

时间:2018-07-09 11:55:01

标签: java swagger swagger-codegen

我正在尝试自定义OpenAPI规范字符串格式之间的映射

  • 时间
  • 日期
  • 日期时间

  • OffsetTime
  • LocalDate
  • 即时

分别。

我目前正在使用自己的自定义服务器生成器,该生成器扩展了JavaJerseyServerCodegen,所以我进行了更改,一切正常

@Override
public void processOpts()
{
  super.processOpts();
  typeMapping.put("DateTime", "Instant");
  typeMapping.put("date", "LocalDate");

  importMapping.put("Instant", "java.time.Instant");
  importMapping.put("LocalDate", "java.time.LocalDate");
 ...

问题是时间格式,因为默认情况下代码源没有定义此格式,因此我可以“覆盖”它。
可以做我想做的吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:1)

经过大量的敲打,我尝试了一种KISS方法,并得到了以下解决方案:

@Override
public String getSwaggerType(final Property property)
{
  if ((property instanceof StringProperty) && ("time".equals(property.getFormat())))
  {
    return "OffsetTime";
  }
  else
  {
    return super.getSwaggerType(property);
  }
}

现在我可以简单地执行以下操作

@Override
public void processOpts()
{
  super.processOpts();
  typeMapping.put("DateTime", "Instant");
  typeMapping.put("date", "LocalDate");
  typeMapping.put("time", "OffsetTime");

  importMapping.put("Instant", "java.time.Instant");
  importMapping.put("LocalDate", "java.time.LocalDate");
  importMapping.put("OffsetTime", "java.time.OffsetTime");
  ...