Springfox (Swagger spec 2.0, aktuell)
Springfox hat Swagger-SpringMVC ersetzt und unterstützt jetzt beide Swagger-Spezifikationen 1.2 und 2.0. Die Implementierungsklassen haben sich geändert, was eine tiefere Anpassung ermöglicht, jedoch mit etwas Arbeit. Die Dokumentation wurde verbessert, es müssen jedoch noch einige Details für die erweiterte Konfiguration hinzugefügt werden. Die alte Antwort für die 1.2-Implementierung finden Sie weiter unten.
Maven-Abhängigkeit
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
Die Implementierung mit dem Minimum sieht mehr oder weniger gleich aus, verwendet jetzt jedoch die Docket
Klasse anstelle der SwaggerSpringMvcPlugin
Klasse:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/api/.*"))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("TITLE")
.description("DESCRIPTION")
.version("VERSION")
.termsOfServiceUrl("http://terms-of-services.url")
.license("LICENSE")
.licenseUrl("http://url-to-license.com")
.build();
}
}
Ihre Swagger 2.0 API-Dokumentation ist jetzt unter verfügbar http://myapp/v2/api-docs
.
Hinweis: Wenn Sie Spring Boot nicht verwenden, sollten Sie die Jackson-Databind-Abhängigkeit hinzufügen. Da Springfox Jackson für die Datenbindung verwendet.
Das Hinzufügen der Unterstützung für die Swagger-Benutzeroberfläche ist jetzt noch einfacher. Wenn Sie Maven verwenden, fügen Sie die folgende Abhängigkeit für das Swagger UI-Webjar hinzu:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
Wenn Sie Spring Boot verwenden, sollte Ihre Web-App automatisch die erforderlichen Dateien abrufen und die Benutzeroberfläche unter http://myapp/swagger-ui.html
(früher :) anzeigen http://myapp/springfox
. Wenn Sie Spring Boot nicht verwenden, müssen Sie, wie in der folgenden Antwort erwähnt, einen Ressourcenhandler für die Dateien registrieren, wie yuriy-tumakha erwähnt. Die Java-Konfiguration sieht folgendermaßen aus:
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
Die neue Funktion zur Generierung statischer Dokumentationen sieht auch ganz gut aus, obwohl ich sie selbst nicht ausprobiert habe.
Swagger-SpringMVC (Swagger-Spezifikation 1.2, älter)
Die Dokumentation für Swagger-SpringMVC kann etwas verwirrend sein, ist aber unglaublich einfach einzurichten. Die einfachste Konfiguration erfordert das Erstellen einer SpringSwaggerConfig
Bean und das Aktivieren der annotationsbasierten Konfiguration (was Sie wahrscheinlich bereits in Ihrem Spring MVC-Projekt tun):
<mvc:annotation-driven/>
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
Ich denke jedoch, dass es sich lohnt, den zusätzlichen Schritt des Definierens einer benutzerdefinierten Swagger-Konfiguration mithilfe der SwaggerSpringMvcPlugin
anstelle der vorherigen XML-definierten Bean zu unternehmen :
@Configuration
@EnableSwagger
@EnableWebMvc
public class SwaggerConfig {
private SpringSwaggerConfig springSwaggerConfig;
@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}
@Bean
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.includePatterns(".*api.*"); // assuming the API lives at something like http://myapp/api
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("TITLE")
.description("DESCRIPTION")
.version("VERSION")
.termsOfServiceUrl("http://terms-of-services.url")
.license("LICENSE")
.licenseUrl("http://url-to-license.com")
.build();
}
}
Wenn Sie Ihre Anwendung ausführen, sollte jetzt Ihre API-Spezifikation unter erstellt werden http://myapp/api-docs
. Um die ausgefallene Swagger-Benutzeroberfläche einzurichten, müssen Sie die statischen Dateien aus dem GitHub-Projekt klonen und in Ihr Projekt einfügen. Stellen Sie sicher, dass Ihr Projekt für die Bereitstellung der statischen HTML-Dateien konfiguriert ist:
<mvc:resources mapping="*.html" location="/" />
Bearbeiten Sie dann die index.html
Datei auf der obersten Ebene des Swagger-UI- dist
Verzeichnisses. Oben in der Datei sehen Sie JavaScript, das auf die api-docs
URL eines anderen Projekts verweist . Bearbeiten Sie dies, um auf die Swagger-Dokumentation Ihres Projekts zu verweisen:
if (url && url.length > 1) {
url = url[1];
} else {
url = "http://myapp/api-docs";
}
Wenn Sie jetzt zu navigieren http://myapp/path/to/swagger/index.html
, sollte die Swagger-UI-Instanz für Ihr Projekt angezeigt werden.