2015-03-30 8 views
6

Ich verwende Spring MVC (über Spring Boot) und integrierte Swagger API-Dokumentation mit der Swagger-Spring-MVC-Bibliothek.Wie @ApiModelProperty dataType auf String für Swagger-Dokumentation

Ich habe eine Klasse, die etwa wie folgt aussieht:

@ApiModel 
public class CartItem { 
    ... 
    private Money listPrice; // joda money class 

    @JsonSerialize(using = ToStringSerializer.class) 
    @ApiModelProperty(required = true, dataType = "java.lang.String") 
    public Money getListPrice() { 
     return listPrice; 
    } 
    ... 
} 

Da ich die ToStringSerializer für dieses Feld verwendet wird, es listPrice.toString im JSON ist zurückkehrt, mit anderen Worten:

{ 
    "listPrice": "USD 10.50" 
} 

Die Swagger-Dokumentation berücksichtigt jedoch nicht dataType = "java.lang.String". Es zeigt das Antwortmodell als:

"CartItem": { 
    "description": "", 
    "id": "CartItem", 
    "properties": { 
     "listPrice": { 
      "required": false, 
      "type": "Money" 
     } 
    } 
} 

ich versucht habe, die @ApiModelProperty Anmerkung auf dem Feld als auch die Methode setzen, und in beiden Fällen sind das required Feld respektiert wird, aber das dataType Feld ignoriert. Ich habe auch versucht, "String", "string" und "java.lang.String" für den dataType zu verwenden, aber keiner von denen hat funktioniert.

Fehle ich etwas, oder ist das nur ein Fehler in der Bibliothek swagger-spring-mvc?

Antwort

4

Es stellt sich heraus, dass dataType in der aktuellen Version der Swagger Spring MVC-Bibliothek vollständig ignoriert wird. Ich fand eine kurze Diskussion über es hier:

https://github.com/springfox/springfox/issues/602

Sieht aus wie es in der Version 2 enthalten sein könnte, wenn das aus ist.

EDIT: Obwohl Version 2 besagt, dass es DataType unterstützt, scheint es zu dieser Zeit nicht zu funktionieren. Ein besserer Ansatz für meine Bedürfnisse ist die Dokumentation Einstellungen mit einer direkten Modell Substitution wie folgt zu konfigurieren:

@Bean 
public Docket swaggerSpringMvcPlugin() { 
    return new Docket(DocumentationType.SWAGGER_2) 
      .directModelSubstitute(Money.class, String.class); 
} 
+1

Sie sind richtig, dass es jetzt in 2.0.x (erhältlich in 2.0.0-SNAPSHOT) unterstützt wird, mit einigen Einschränkungen . Der Datentyp muss eine gültige paketqualifizierte Klasse sein. –

+0

Dank @DilipKrishnan. Ich sehe, dass die Dokumentation zu github aktualisiert wurde, um auch die Änderung widerzuspiegeln. – nerdherd

Verwandte Themen