我正在使用Springfox-swagger为我的Spring Boot REST服务生成Swagger页面。作为我序列化为JSON的POJO的一部分,我使用了:


javax.money.MonetaryAmount
java.time.LocalDate


我看到的问题是,在Swagger中,响应的“模型”和“模型Shema”选项卡显示了这些字段的实现细节,即

LocalDate {
 chronology (IsoChronology, optional),
 dayOfMonth (integer, optional),
 dayOfWeek (string, optional) = ['MONDAY' or 'TUESDAY' or 'WEDNESDAY' or 'THURSDAY' or 'FRIDAY' or 'SATURDAY' or 'SUNDAY'],
 dayOfYear (integer, optional),
 era (Era, optional),
 leapYear (boolean, optional),
 month (string, optional) = ['JANUARY' or 'FEBRUARY' or 'MARCH' or 'APRIL' or 'MAY' or 'JUNE' or 'JULY' or 'AUGUST' or 'SEPTEMBER' or 'OCTOBER' or 'NOVEMBER' or 'DECEMBER'],
 monthValue (integer, optional),
 year (integer, optional)
}
IsoChronology {
  calendarType (string, optional),
  id (string, optional)
}
Era {
  value (integer, optional)
}




MonetaryAmount {
  context (MonetaryContext, optional),
  currency (CurrencyUnit, optional),
  factory (MonetaryAmountFactory«MonetaryAmount», optional),
  negative (boolean, optional),
  negativeOrZero (boolean, optional),
  number (NumberValue, optional),
  positive (boolean, optional),
  positiveOrZero (boolean, optional),
  zero (boolean, optional)
}
MonetaryContext {
  (...)
}
CurrencyUnit {
  (...)
}
CurrencyContext {
  (...)
}
MonetaryAmountFactory«MonetaryAmount» {
  (...)
}
NumberValue {
  (...)
}


如果重要的话,我正在使用javax.money.MonetaryAmount(JSR 354)的Moneta 1.1实现。

现在,这对于我想要的内容来说太冗长了,因此我实现了一个Serialiser,并且我的响应(和请求)按预期工作。但是,架构没有反映这一点。序列化请求后,是否可以配置模式格式?

当我意识到此问题有很多可动部分时,我创建了一个proof of concept project来全面展示该问题。

最佳答案

基于your example,看起来您正在序列化程序中将MonetaryAmount转换为double,并且将LocalDate转换为String

因为springfox不能自检杰克逊机器(至少现在还没有:-)),所以我们需要告诉SpringFox您在序列化器中正在做什么。为此,如摘要中the documentation所述,您可以通过提供备用类型规则来提供提示。

docket
      .directModelSubstitute(LocalDate.class, String.class)
      .directModelSubstitute(MonetaryAmount.class, Double.class)


有三种方法可以执行此操作,对于常规类型,可以通过directModelSubstitutes;对于单类型参数通用类型,可以通过genericModelSubstitutes;对于更复杂的通用类型用例,可以通过alternateTypeRules

关于java - Springfox Swagger生成创建奇数模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41675459/

10-10 09:15