2016-02-15 27 views
8

Ho sviluppato un microservice utilizzando Spring Boot. La documentazione per l'API REST è realizzata con Swagger. Alcune risorse REST utilizzano i concetti di Spring per fornire gratuitamente l'impaginazione. Di seguito è riportato un esempio:Documentazione swagger per interfaccia Spring Pageable

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

Se apro la pagina di Swagger, il seguente modulo è disponibile per la risorsa:

enter image description here

Il problema che ho è che il parametro paginabile viene rilevata con i contenuti -tipo application/json e non so come passare un valore per cambiare la dimensione della pagina, per esempio. Tutti i valori sembrano essere ignorati.

È possibile passare i parametri di query come oggetto JSON? o è possibile configurare Swagger per generare campi di parametri di query indipendenti per getter contenuti dall'interfaccia Pageable?

Si prega di notare che sto usando Springfox con Gradle:

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

Si sta utilizzando la primavera-fox per generare le specifiche Swagger dal controller REST? –

+0

Sì, sto usando Springfox nella versione _2.3.1_. – Laurent

risposta

15

Questo è un problema noto con la primavera-Fox. Vedere il numero #755. Basato sul commento di zdila 2 in questo momento l'alternativa è aggiungere @ApiImplicitParams che non è l'ideale ma funziona.

@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

Ho scoperto che dovevo usare 'dataType =" int ", altrimenti il ​​tipo di dati viene visualizzato come Non definito come mostrato nell'immagine. – pauli

2

risposta di Vineet Bhatia con @ApiImplicitParams guarda bene. Ma ho affrontato la situazione, quando @ApiIgnor e @ApiParam(hidden = true) non funziona e si possono ancora osservare i parametri asembler e pageable. Ho risolto questo problema con l'aggiunta successiva linea

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

al fagiolo Docket nel mio SwaggerConfig.

2

Risposta di Vineet Bhatia avrà un problema di convalida quando non si esegue su localhost. Discuterà per i parametri interi che non sono corrispondenti allo schema JSON.

Così ho cambiato intero a stringa:

@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.") 
}) 
Problemi correlati