2016-02-15 5 views
8

Ich habe einen Microservice mit Spring Boot entwickelt. Die Dokumentation für die REST API wird mit Swagger erstellt. Einige REST-Ressourcen verwenden Spring-Konzepte, um die Paginierung kostenlos bereitzustellen. Unten ist ein Beispiel:Swagger Dokumentation für Spring Pageable Schnittstelle

@RequestMapping(value = "/buckets", method = GET) 
public PagedResources list(Pageable pageable, PagedResourcesAssembler assembler) { 
    return bucketService.listBuckets(pageable, assembler); 
} 

Wenn ich die Swagger Seite zu öffnen, das folgende Formular für die Ressource verfügbar ist:

enter image description here

Das Problem, das ich habe, ist, dass der seitenwechselbar Parameter mit Inhalt erkannt wird Typ Anwendung/JSON und ich weiß nicht, wie Sie einen Wert übergeben, um die Seitengröße zum Beispiel zu ändern. Alle Werte scheinen ignoriert zu werden.

Ist es möglich, die Abfrageparameter als JSON-Objekt zu übergeben? Oder ist es möglich, Swagger zu konfigurieren, um unabhängige Abfrageparameterfelder für Getter zu erzeugen, die in der anordnungsfähigen Schnittstelle enthalten sind?

Bitte beachten Sie, dass ich Springfox mit Gradle bin mit:

compile 'io.springfox:springfox-spring-web:2.3.1' 
compile 'io.springfox:springfox-swagger2:2.3.1' 
compile 'io.springfox:springfox-swagger-ui:2.3.1' 
+0

Sie feder Fuchs werden mit dem Swagger spec aus dem REST-Controller zu generieren? –

+0

Ja, ich benutze Springfox in Version _2.3.1_. – Laurent

Antwort

15

Dies ist ein bekanntes Problem mit Frühlings-Fox. Siehe Ausgabe #755. Basierend auf zdilas Kommentar 2 zu dieser Zeit ist die Alternative @ApiImplicitParams, die nicht ideal ist, aber es funktioniert.

@ApiImplicitParams({ 
    @ApiImplicitParam(name = "page", dataType = "integer", paramType = "query", 
      value = "Results page you want to retrieve (0..N)"), 
    @ApiImplicitParam(name = "size", dataType = "integer", paramType = "query", 
      value = "Number of records per page."), 
    @ApiImplicitParam(name = "sort", allowMultiple = true, dataType = "string", paramType = "query", 
      value = "Sorting criteria in the format: property(,asc|desc). " + 
        "Default sort order is ascending. " + 
        "Multiple sort criteria are supported.") 
}) 

[Swagger UI showing @ApiImplicitParams for Pageable]

1https://github.com/springfox/springfox/issues/755

2https://github.com/springfox/springfox/issues/755#issuecomment-135059871

+1

Ich fand, dass ich 'dataType =" int "verwenden musste, andernfalls kommt der Datentyp als Undefined heraus, wie im Bild gezeigt. – pauli

2

Vineet Bhatia Antwort mit @ApiImplicitParams sieht gut aus. Aber ich habe mit der Situation konfrontiert, wenn @ApiIgnor und @ApiParam(hidden = true) nicht funktioniert und Sie können immer noch die Assembler und auslagerbare Params beobachten. Ich reparierte dieses Problem, indem in meinem SwaggerConfig nächste Zeile

docket.ignoredParameterTypes(Pageable.class, PagedResourcesAssembler.class); 

zur Docket Bohne hinzufügen.

2

Antwort von Vineet Bhatia wird Validierungsproblem haben, wenn Sie nicht auf localhost laufen. Es wird für Integer-Parameter argumentieren, dass sie nicht dem JSON-Schema entsprechen.

Also änderte ich integer zu string:

@ApiImplicitParams({ 
     @ApiImplicitParam(name = "page", dataType = "string", paramType = "query", 
       value = "Results page you want to retrieve (0..N)"), 
     @ApiImplicitParam(name = "size", dataType = "string", paramType = "query", 
       value = "Number of records per page."), 
     @ApiImplicitParam(name = "sort", allowMultiple = true, dataType = "string", paramType = "query", 
       value = "Sorting criteria in the format: property(,asc|desc). " + 
         "Default sort order is ascending. " + 
         "Multiple sort criteria are supported.") 
}) 
Verwandte Themen