2017-01-16 2 views
2

Ich benutze Springfox-swagger, um eine Swagger-Seite für meine Spring Boot REST-Service zu generieren. Als Teil eines meines POJOs, dass ich zu JSON serialise ich benutze:Springfox Swagger Generation erstellt ungerade Schema

  • javax.money.MonetaryAmount
  • java.time.LocalDate

Die Frage, die ich zu sehen bin, ist, dass in Swagger, das Modell und Modell Shema tabs zeigen für die Antwort die Details der Implementierung dieser Felder, nämlich

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) 
} 

und

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 { 
    (...) 
} 

Ich verwende die Moneta 1.1 Implementierung von javax.money.MonetaryAmount (JSR 354), wenn das wichtig ist.

Nun, das ist weit zu ausführlich für das, was ich will, also habe ich einen Serialisierer implementiert, und meine Antwort (und Anfragen) funktionieren wie erwartet. Die Schemas spiegeln dies jedoch nicht wider. Gibt es eine Möglichkeit, das Format der Schemas nach dem Serialisieren der Anfragen zu konfigurieren?

Als ich feststelle, dass es ziemlich viele bewegliche Teile zu diesem Problem gibt, habe ich ein proof of concept project geschaffen, um das Problem in seinem vollen Ruhm zu zeigen.

Antwort

2

Basierend auf your example sieht aus wie Sie MonetaryAmount-double und LocalDate-String in Ihrem Serializer sind konvertieren.

Da Springfox die Jackson-Maschinerie nicht kontrollieren kann (zumindest noch nicht :-)), müssen wir SpringFox mitteilen, was Sie in Ihren Serialisierern tun. Um dies zu tun, wie in the documentation beschrieben, können Sie einen Hinweis geben, indem Sie alternative Regeln angeben.

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

Es gibt drei Möglichkeiten, dies zu tun, entweder über directModelSubstitutes für regelmäßige Typen, genericModelSubstitutes für einzelne Art Argument generische Typen und alternateTypeRules für komplexere gattungsgemäße Anwendungsfälle.

+0

Großartig, danke. Gibt es eine Möglichkeit, mehr lokalisierte Substitution zu tun? I.e. LocalDate -> String ein Ort und LocalDate -> Long in einem anderen? – kinbiko

+0

Die Antwort gefunden: Sie können '@ApiModelProperty (dataType =" com.qualified.ReplacedWith ")' auf den Gettern des POJO verwenden. – kinbiko

+1

Es tut uns leid, dass Sie nicht früher geantwortet haben. Das hätte ich vorgeschlagen –

Verwandte Themen