Swagger Dokumentation für das Frühjahr interface Pageable
Entwickelt ich ein microservice mit Spring Boot. Die Dokumentation für die REST-API mit Swagger. Einige REST-Ressourcen nutzen Frühling Konzepte zu bieten, pagination kostenlos. Unten ist ein Beispiel:
@RequestMapping(value = "/buckets", method = GET)
public PagedResources list(Pageable pageable, PagedResourcesAssembler assembler) {
return bucketService.listBuckets(pageable, assembler);
}
Wenn ich öffnen Sie die Swagger-Seite die folgende form ist erhältlich für die Ressource:
Das Problem, das ich habe ist, dass die pageable-parameter erkannt wird mit content-type application/json und ich weiß nicht, wie man einen Wert übergeben, ändern Sie die Seite Größe, zum Beispiel. Alle Werte scheinen ignoriert zu werden.
Ist es möglich, übergeben Sie die Abfrage-Parameter als JSON-Objekt? oder ist es möglich zu konfigurieren, Swagger zu erzeugen eigenständige query-parameter-Felder für Getter enthalten, die durch die Pageable-Schnittstelle?
Bitte beachten Sie, dass ich mit Springfox mit 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'
- Sind Sie mit spring-fox zu generieren Fors spec aus der REST-controller?
- Ja, ich bin mit Springfox in der version 2.3.1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein bekanntes Problem mit Spring-Fox. Siehe Ausgabe #755. Basierend auf zdila Kommentar Zwei zu diesem Zeitpunkt alternative ist das hinzufügen von @ApiImplicitParams das ist nicht ideal, aber es funktioniert.
[
Eins https://github.com/springfox/springfox/issues/755
Zwei https://github.com/springfox/springfox/issues/755#issuecomment-135059871
dataType = "int"
sonst den Datentyp kommt heraus, als unbestimmt, wie im Bild gezeigt.Gebäude auf Vineet Bhatia Antwort, Sie können wickeln Sie die Lösung in eine benutzerdefinierte Anmerkung zur Wiederverwendbarkeit:
Welche dann verwendet werden können, etwa so:
'ApiImplicitParams' not applicable to annotation type
Vineet Bhatia Antwort mit
@ApiImplicitParams
sieht gut aus. Aber ich konfrontiert mit der situation, wenn@ApiIgnor
und@ApiParam(hidden = true)
funktioniert nicht und man kann immer noch beobachten, asembler und navigierbaren params. Ich behoben, dieses problem durch hinzufügen der nächsten Zeiledem Laufzettel bean in meiner
SwaggerConfig
.Antwort von Vineet Bhatia wird die Validierung haben problem, wenn Sie nicht auf localhost. Sie argumentieren für integer-Parameter, die Sie nicht die entsprechenden json-schema.
Also änderte ich die integer in string:
Für Menschen, die will, um dieses problem zu lösen 2019. Diese Konfiguration via springfox Dokumentation funktioniert einwandfrei außer man kann nicht festgelegt Beschreibung für Parameter.
Code ist hier.
https://github.com/springfox/springfox/blob/ef1721afc4c910675d9032bee59aea8e75e06d27/springfox-data-rest/src/main/java/springfox/documentation/spring/data/rest/configuration/SpringDataRestConfiguration.java
Obwohl die Lösung mit der impliziten Parametern arbeitet, führt er eine Menge von extra, spröde code. Am Ende gingen wir mit der folgenden Lösung:
Passieren wir eine
PageRequest
(die implementiertPageable
) zu unserem service, das gibt einenPage
. (alle ausorg.springframework.data.domain
).Den
org.springframework.data.web.PagedResourcesAssembler
wird injiziert automatisch über die controller-Methode und ermöglicht die Zuordnung von Elementen zuorg.springframework.hateoas.PagedResources
Wir nicht brauchen dynamische Sortierung, so dass wir weggelassen; es birgt einige Herausforderungen zu Sortieren, da springfox nicht spielen schön mit org.springframework.Daten.domain.Art.