Swagger adalah kerangka kerja standar dan lengkap untuk menghasilkan, menggambarkan, memanggil, dan memvisualisasikan layanan web bergaya REST. Tujuan keseluruhannya adalah membuat pembaruan klien dan sistem file pada kecepatan yang sama dengan server. Metode file, parameter dan model diintegrasikan dengan ketat ke dalam kode sisi server, memungkinkan API untuk selalu disinkronkan.
Kesombongan tidak pernah semudah ini untuk digunakan dan mengelola dan menggunakan API yang kuat. OK, di atas adalah pernyataan resmi, saya menyalinnya secara langsung. Menurut pendapat saya, Swagger adalah manajer dokumen antarmuka. Di masa lalu, kami biasanya menulis antarmuka di dunia, tetapi ada masalah yang perlu kami andalkan pada alat pihak ketiga saat menguji. Antarmuka GET tidak apa -apa, dan dibuka langsung oleh browser. Posting hanya dapat mengandalkan alat lain. Kesombongan dapat secara langsung menghasilkan Dokumen Antarmuka (Javaee) melalui anotasi dalam kode. Kebanyakan orang menggunakan metode ini, dan secara langsung diintegrasikan ke dalam proyek untuk memfasilitasi anggota untuk melihat, dan juga dapat menguji secara langsung. Selain itu, antarmuka kesombongan juga baik. Mungkin inilah mengapa saya memilih untuk menggunakan kesombongan. Gaya tenang yang secara langsung disebutkan oleh pejabat tidak tenang. Antarmuka gaya juga dapat digunakan. Tentu saja, ada cara lain bagi kesombongan untuk menulis instruksi antarmuka secara manual. Keuntungannya adalah bahwa kode hanya memiliki kode, karena setelah anotasi antarmuka kesombongan ditambahkan ke kode, jumlah kode masih meningkat banyak. Tentu saja, kerugiannya adalah bahwa setelah Anda memodifikasi kode, Anda harus mengubah dokumen antarmuka.
SpringMVC sangat sederhana untuk mengintegrasikan Springfox-Swagger2 dan Springfox-Swagger-UI, hanya dua langkah:
(1) Tambahkan dependensi dalam pom
<dependency> <GroupId> io.springfox </groupid> <ArTifactId> springfox-swagger-ui </arttifactid> <version> $ {springfox-swagger.version} </version> </Dependency> <dependency> <grouptid> IO.springfox </groupid> <ArtiFAcD> <ROMPROPID> <version> $ {springfox-swagger.version} </version> </dependency>(2) Tambahkan kelas konfigurasi Swagger:
@Configuration @enableSwagger2 @EnableWebMvc @ComponentScan ("com.xxx.controller") kelas publik swaggerconfig {} Kemudian Anda dapat melihat semua informasi antarmuka dalam proyek melalui http: //localhost/swagger-ui.html, dan Anda dapat melihat data JSON melalui http: // localhost/v2/API-docs.
Tapi bagaimana cara menonaktifkan dokumen API ini di lingkungan produksi? Saya mencoba banyak cara dan akhirnya menemukan metode yang sederhana dan praktis:
@Configuration @enableSwagger2 @EnableWebMvc @ComponentScan ("com.xxx.controller") kelas publik swaggerconfig {@Autowired configService configService; @Bean Public Docket CustomDocket () {if (configService.getServerenv () == serverEnvenum.online) {return new Docket (DocumentationType.swagger_2) .ApiInfo (ApiInfoonline () .Select () .Paths (PathSelectors.none ()). .membangun(); } else {return new docket (DocumentationType.swagger_2) .apiInfo (apiInfo ()); }} private apiInfo apiInfo () {return new ApiInfobuilder () .title ("xxx system") .description ("XXX System Interface") .license ("") .LicenseUrl ("") .TMSOfServiceUrl ("") .version ("1.0.0. .membangun(); } private ApiInfo ApiInfoonline () {return new ApiInfobuilder () .title ("") .Description ("") .license ("") .licenseUrl ("") .termsofserviceurl ("") .version ("") .contact (";") (") (") ("). }} Meskipun halaman http: //localhost/swagger-ui.html masih dapat diakses, tidak ada konten, termasuk http: // localhost/v2/API-docs.
Seharusnya ada cara yang lebih baik!
Referensi: //www.vevb.com/article/135312.htm
Kesombongan harus dalam konteks yang sama dengan SpringMVC, SpringMVC hanyalah subkonteks dari Spring. Jika Swagger membuat beban konteks pegas, maka URL Swagger itu tidak dapat dicegat dengan SpringMVC Interceptor!
Jadi, ada dua solusi:
Jika menggunakan anotasi:
(1) Konfigurasi Spring-MVC:
<!-Gunakan anotasi untuk secara otomatis mendaftarkan kacang, hanya memindai @controller-> <konteks: komponen-scan-package = "com.inspur.eyun.yunbx" use-default-filters = "false"> <!-Basis-paket jika ganda, terpisah dengan ","-> <konteks: termasuk tipe-filter = "annotation" Expression = "org.springframework.steretype.controller"/> <konteks: termasuk filter type = "ditugaskan" ekspresi = "com.inspur.eyun.yunbx.swagger.swaggerconfig"/> </konteks: komponen-scan>
Perhatikan bahwa Anda perlu menambahkan konfigurasi Swagger, dan pada saat yang sama:
(2) Konfigurasi Musim Semi:
<!-Pemindaian paket, anotasi terkait-> <konteks: komponen-scan-package = "com.inspur.eyun.yunbx"> <Context: Excule-filter type = "annotation" expression = "org.springframework.steretype.controller"/<konteks: tidak ada jenis filter = "ditugen" Expression = "com.inspur.eyun.yunbx.swagger.swaggerconfig"/> </konteks: component-scan>
Perhatikan kesombongan yang tidak termasuk
(3) Konfigurasi Swagger:
@Configuration @enableSwagger2 @EnableWebMvc @ComponentScan ("com.inspur.eyun.yunbx.controller") kelas publik swaggerconfig {}Perhatikan anotasi @Configuration.
Tentu saja, metode yang lebih disarankan adalah menggunakan metode konfigurasi XML, karena dengan cara ini Anda tidak perlu memperkenalkan paket ketergantungan Swagger:
(1) Konfigurasi Spring-MVC:
<!-Gunakan anotasi untuk secara otomatis mendaftarkan kacang, hanya memindai @controller-> <konteks: komponen-scan-package = "com.inspur.eyun.yunbx" use-default-filters = "false"> <!-Basis-paket jika ganda, terpisah dengan ","-> <konteks: termasuk tipe-filter = "annotation" Expression = "org.springframework.sheotype.controller"/> </context: component-scan> <import resource = "classpath: spring-mvc-swagger.xml"/>
Spring-mvc-swagger.xml:
<? Xml Version = "1.0" Encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: XSI = "http://www.w3.org/2001/xml =smloca: httpa: httpa" httpa "httpa" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-leans.xsd Kosong -> <bean /> </tac>
Catatan: Kami menempatkan kesombongan dalam file konfigurasi secara terpisah. Jika ini adalah lingkungan online, konten file kosong. Jika itu adalah lingkungan uji offline, kesombongan dikonfigurasi.
(2) Konfigurasi Musim Semi:
<!-Pemindaian paket, anotasi terkait-> <konteks: komponen-scan-package = "com.inspur.eyun.yunbx"> <Context: Excule-filter type = "annotation" Expression = "org.springframework.stereotype.controller"/</Context: Component-Scan>
(3) Konfigurasi Swagger:
@EnableSwagger2 @EnableWebMvc kelas publik SwaggerConfig {@bean docket customDocket () {return new docket (DocumentationType.swagger_2) .ApiInfo (ApiInfo ()) .select () .apis (requesthanderselectors.basepackage ("com.inspur. .paths (pathselectors.any ()) .build (); } private apiInfo apiInfo () {return new ApiInfoBuilder () .title ("XXX Platform") .Description ("XXX Platform Interface") .license ("") .licenseUrl ("") .termSofServiceurl ("") .version ("1.0.0.0.0.0.0.0.0.0.0) .coFServiceUrl (" "). .membangun(); }}Catatan: Di sini kami menghapus @configuration, dan pada saat yang sama, kami memodifikasi POM kami dan mengonfigurasi beberapa kemasan profil:
pom.xml:
<!-Swagger-> <dependency> <GroupId> io.springfox </groupid> <ArtifactId> springfox-swagger2 </artifactid> <version> $ {springfox-swagger.version} </version> <scope> $ {swagger.scope} </scope> </version> <coupope> $ {swagger.scope} </scope> </Dependency> <ArTifactId> springfox-swagger-ui </artifactid> <scope> $ {swagger.scope} </seupope> <version> $ {springfox-swagger-ui.version} </version> </dependency>CATATAN: Cakupan yang tergantung di sini diatur secara dinamis. Jika ini adalah lingkungan online, kami dapat mengatur ruang lingkup yang disediakan.
<profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> <swagger.scope>compile</swagger.scope> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profiles.active> tes </profiles.active> <wagger.scope> compile </swagger.scope> </poperties> </profile> <profile> <id> Online </dr Properties> <Properties> <profiles.active> </profiles.active> <swagger.scope> compile </ID </crofiles> <profil> </profiles.scope.coPope.scope.scope.scopger <Properties> <Profiles.Active> online </profiles.active> <wagger.scope> disediakan </swagger.scope> </properties> </profile> </profiles> </profiles>
Atur lingkup yang berbeda untuk dependensi Swagger melalui profil yang berbeda!
Catatan: Ada bug di springfox-swagger.version = 2.7.0, dan Anda dapat menggunakan versi 2.6.1 yang lebih rendah. Trik yang terlalu sialan!
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.