Pengantar Swagger
Swagger memang hal yang baik. Ini dapat secara otomatis menghasilkan dokumen antarmuka API berdasarkan kode bisnis, terutama untuk proyek dengan gaya yang tenang. Pengembang hampir tidak dapat mempertahankan RESTAP API secara khusus. Kerangka kerja ini dapat secara otomatis menghasilkan API bergaya RESTFUT untuk kode bisnis Anda, dan juga menyediakan antarmuka uji yang sesuai untuk secara otomatis menampilkan respons dalam format JSON. Ini sangat memfasilitasi biaya komunikasi dan koordinasi antara pengembang backend dan front-end.
Pengantar Springfox-Spragger
Dengan fungsi kesombongan yang kuat, industri Open Source Open Source Big Spring Framework dengan cepat terus. Ini sepenuhnya memanfaatkan keunggulannya sendiri, mengintegrasikan kesombongan ke dalam proyeknya sendiri, dan mengintegrasikan spring-handsger, yang kemudian berkembang menjadi Springfox. Springfox sendiri hanya menggunakan karakteristik AOP sendiri dan mengintegrasikan kesombongan ke steker. Generasi API bisnisnya sendiri masih bergantung pada kesombongan untuk mencapainya.
Ada sedikit informasi tentang kerangka kerja ini, dan kebanyakan dari mereka adalah penggunaan sederhana entry-level. Saya menemukan banyak jebakan dalam proses mengintegrasikan kerangka kerja ini ke dalam proyek saya. Untuk menyelesaikan jebakan ini, saya harus menggali kode sumbernya untuk melihat apa itu. Artikel ini menjelaskan pemahaman saya tentang Springfox dan apa yang perlu diperhatikan selama penggunaan Springfox.
Prinsip Umum Springfox
Prinsip umum springfox adalah bahwa dalam proses startup proyek, selama proses inisialisasi konteks pegas, kerangka kerja secara otomatis memuat beberapa kacang yang berhubungan dengan kesombongan ke dalam konteks saat ini sesuai dengan konfigurasi, dan secara otomatis memindai kelas-kelas yang mungkin perlu menghasilkan dokumen API dalam sistem, dan menghasilkan cache informasi yang sesuai. Jika lapisan kontrol MVC dari proyek menggunakan SpringMVC, ia akan secara otomatis memindai semua kelas pengontrol untuk menghasilkan dokumen API yang sesuai sesuai dengan metode di kelas pengontrol ini.
Karena proyek saya adalah SpringMVC, artikel ini menggunakan SRPing MVC Integration Springfox sebagai contoh untuk membahas penggunaan dan prinsip -prinsip Springfox.
Langkah -langkah untuk mengintegrasikan springmvc ke dalam springfox
Pertama, proyek perlu menambahkan tiga dependensi berikut:
<!-SRING MVC Dependency-> <dependency> <GroupId> org.springframework </groupid> <ArTifactId> Spring-WEBMVC </artifactid> <version> 4.2.8.release </version> </dependency> <!-Ketergantungan inti Swagger2-<grouppending> </version> </Dependency> <! <ArtifactId> springfox-swagger2 </stifactid> <version> 2.6.1 </version> </gandendency> <!-Swagger-UI menyediakan tampilan API dan antarmuka pengujian untuk proyek-> <dependency> <groupid> IO.SpringFox </srupleDid> <ArTifactid> Springfox </ARTICED> <ArTifacTID> Springfox-SWagger </ARTICED> <TROGER?
Tiga dependensi di atas adalah dependensi paling dasar untuk integrasi proyek SpringMVC dan Springfox, dan dependensi lainnya dihilangkan di sini. Yang pertama adalah ketergantungan dasar SpringMVC, yang kedua adalah ketergantungan kesombongan, dan yang ketiga adalah ketergantungan terkait antarmuka. Ini tidak perlu. Jika Anda tidak ingin menggunakan antarmuka API yang dilengkapi dengan SpringFox, Anda juga tidak dapat menggunakan ini, dan menulis satu set antarmuka yang sesuai dengan proyek Anda. Setelah menambahkan dependensi ini, sistem akan secara otomatis menambahkan beberapa paket toples yang terkait dengan Springfox dan Swagger. Saya melihat sebentar dan menemukan bahwa ada yang berikut ini:
springfox-swagger2-2.6.1.jar
Swagger-annotations-1.5.10.jar
Sumpah-Model 1.5.10.jar
springfox-spi-12.6.1.jar
springfox-core-2.6.1.jar
Springfox-Schema-2.6.1.jar
springfox-swagger-common-2.6.1.jar
Springfox-Spring-Web-2.6.1.jar
Guava-17.0.jar
Spring-plugin-core-1.2.0.release.jar
Spring-plug-Metadata-1.2.0.release.jar
Spring-Spring-ui-ui-2.6.1.jar
Jackson-Databind-2.2.3.jar
Jackson-Annotations-2.2.3.jar
Di atas adalah stoples yang menurut saya secara visual Springfox membutuhkan, dan mungkin tidak sepenuhnya menggambarkan semua stoples yang dibutuhkan Springfox. Dari toples di atas, kita dapat melihat bahwa selain mengandalkan kesombongan, Pringfox juga membutuhkan jambu biji, pegas, Jackson, dan dependensi lainnya (perhatikan bahwa Jackson adalah paket jar yang diperlukan untuk menghasilkan JSON. Jika ketergantungan ini tidak ditambahkan ke proyek itu sendiri, untuk mengintegrasikan pelalap, ketergantungan ini harus ditambahkan).
Penggunaan Springfox yang sederhana
Jika Anda hanya menggunakan konfigurasi default SpringFox, mengintegrasikan dengan SpringMVC sangat sederhana. Cukup tulis kelas yang mirip dengan kode berikut dan masukkan ke dalam proyek Anda. Kodenya adalah sebagai berikut:
@Configuration@enableWebMvc@enableSwagger2publicclass apiconfig {}Perhatikan bahwa di atas adalah file kelas Java yang kosong, nama kelas dapat ditentukan sesuka hati, tetapi tiga anotasi bertanda @configuration, @EnableWebMvc, dan @EnableWagger2 di kelas di atas harus ditambahkan. Ini melengkapi integrasi dasar SpringMVC dan Springfox. Dengan tiga anotasi, setelah proyek dimulai, Anda dapat langsung menggunakan alamat yang mirip dengan yang berikut untuk melihat daftar API: http://127.0.0.1:8080/jaddemo/swagger-ui.html
Ini memang efek yang sangat ajaib. Dengan tiga anotasi sederhana, sistem akan secara otomatis menampilkan semua API dari semua kelas pengontrol dalam proyek. Sekarang, mari kita mulai dengan kelas konfigurasi ini dan cukup analisis prinsip -prinsipnya. Tidak ada kode di kelas ini, dan jelas bahwa ketiga anotasi memainkan peran penting. Di antara mereka, anotasi @Configuration sudah tersedia dalam kerangka musim semi. Ini adalah anotasi yang diidentifikasi oleh anotasi meta @Component. Oleh karena itu, dengan anotasi ini, Spring akan secara otomatis membuat kelas menjadi kacang dan mendaftarkannya ke dalam konteks musim semi. Oleh karena itu, anotasi kedua @EnableWebMVC berarti SRPingMVC diaktifkan. Klik anotasi ini di Eclipse untuk tampilan singkat. Ini untuk memasukkan kacang dari tipe delegatingwebmvcconfiguration ke dalam konteks musim semi melalui anotasi meta @import (delegatingwebmvcconfiguration.class). Saya pikir tujuan kelas ini adalah untuk memberikan kesombongan konfigurasi SpringMVC. Anotasi Ketiga: @Enablingwagger2. Anda dapat memikirkan namanya. Ini digunakan untuk mengintegrasikan Swagger 2. Melalui anotasi meta: @Import ({Swagger2DocumentationConfiguration.class}), ia memperkenalkan jenis Konfigurasi Konfigurasi Konfigurasi Konfigurasi Konfigurasi, dan ini adalah konfigurasi inti dari Swagger. Kode di dalamnya adalah sebagai berikut:
@Configuration@import ({springfoxWebMvccconfiguration.class, swaggerCommonConfiguration.class})@componentscan (basepackages = {"springfox.documentation.swagger2.readers.parameter", "springfox.documentation.swagger2.wagger", "SpringFox.Documentation.Swagger2.Mappers"}) publicclassswaggagger2documentationConfiguration {@bean jacksonmoduleGistrar swagger2module () {returnNewSwagger2JacksonModule (); }}Header kelas ini menggunakan beberapa anotasi, dan kemudian memperkenalkan kelas SpringFoxWebMVCConfiguration dan kelas konfigurasi konfigurasi SwaggerCommon, dan secara otomatis memindai kacang-kacangan Springfox .Swagger2 ke dalam konteks musim semi melalui anotasi komponen. Di sini, yang paling saya minati adalah kelas SpringfoxWebMvCconfiguration. Saya kira kelas ini harus lebih merupakan konfigurasi inti dari springfox terintegrasi MVC. Klik dan lihat kode berikut:
@Configuration@import ({modelConfiguration.class})@componentscan (BasePackages = { "springfox.documentation.spring.web.scanners", "springfox.documentation.spring.web.readers.operation", "springfox.documentation.spring.web.readers.operation", "springfox.documentation.spring.parameter", "springfox.documentation.spring.web.plugins", "springfox.documentation.spring.web.paths"})@enablePluginRegistries ({ DocumentationPlugin.class, ApilistingBuilderPlugin.class, OperationBuilderplugin.class, parameterbuilderplugin.class, ExpandpedParameterBuilderPlugin.class, resourceGroupingStrategy.class, OperationModelSproviderPlugin.class, Defovarategy.classPlass, PathDecorator.class}) PublicClassSpringFoxWebMvCconfiguration {}Kode berikut di kelas ini tidak lebih dari menambahkan beberapa kacang baru melalui anotasi @Bean. Saya tidak terlalu tertarik dengan itu. Yang paling saya minati adalah hal -hal yang ditambahkan ke kepala melalui @EnablePluginRegistries. Springfox didasarkan pada mekanisme pegas-plug untuk mengintegrasikan kesombongan. Bagaimana Spring-Tplug diimplementasikan? Saya belum punya waktu untuk mempelajari prinsip pegas-plug. Tetapi di bawah ini, saya akan menyebutkan bahwa saya menulis plugin plug untuk memperluas fungsionalitas kesombongan. Steker yang ditambahkan di atas melalui @EnablePluginRegistries belum tersedia. Kode -kode yang saya lihat terutama termasuk apilistingbuilderplugin.class, OperationBuilderplugin.class, parameterbuilderplugin.class, Expandedparameterbuilderplugin.class, ExpandedParameterBuilderplugin.class,
ApilistingBuilderPlugin pertama, yang memiliki dua kelas implementasi, yaitu ApilistingReader dan SwaggerapilistingReader. Di antara mereka, APILISTINGREADER secara otomatis akan menghasilkan daftar API sesuai dengan tipe pengontrol, dan SWaggerApilistingReader akan menghasilkan daftar API sesuai dengan kelas yang diidentifikasi oleh anotasi @API. Plugin OperationBuilderPlugin digunakan untuk menghasilkan dokumen API tertentu. Jenis plugin ini memiliki banyak kelas implementasi. Mereka masing -masing membagi persalinan mereka dan melakukan hal -hal mereka sendiri. Saya tidak melihat detailnya dengan cermat, tetapi hanya fokus pada salah satu kelas implementasi: OperationParameterReader. Kelas ini adalah plugin yang digunakan untuk membaca parameter API. Ini bergantung pada kelas alat ModelAttributeParameterExpander, yang secara otomatis dapat menguraikan objek perintah dari tipe non-sederhana dalam parameter metode antarmuka dalam pengontrol untuk mendapatkan daftar parameter yang berisi semua atribut (ada lubang di sini yang dapat menyebabkan rekursi tak terbatas, yang diperkenalkan di bawah). Plug-in ExpandpedParameterBuilderPlugin terutama digunakan untuk memperluas beberapa fungsi parameter antarmuka, seperti menentukan tipe data parameter ini dan apakah itu parameter yang diperlukan untuk antarmuka ini, dll. Secara keseluruhan, seluruh springfox-spring sebenarnya diangkut oleh serangkaian colokan ini. Ketika sistem dimulai, mereka disetel, beberapa digunakan untuk memindai daftar antarmuka, beberapa digunakan untuk membaca parameter antarmuka, dll. Tujuan umum mereka adalah untuk memindai semua antarmuka API dalam sistem dan menyimpannya untuk dilihat pengguna. Jadi, bagaimana rangkaian colokan tabel ini disetel dan di mana pintu masuk eksekusi mereka?
Kami menempatkan titik perhatian kami pada konten anotasi Componentscan di header kode kelas SpringFoxWebMvCconfiguration di atas. Dalam anotasi ini, sebuah paket yang disebut springfox.documentation.spring.web.plugins dipindai. Paket ini dapat ditemukan di Springfox-Spring-Web-2.6.1.jar. Di bawah paket ini, kami menemukan bahwa ada dua kelas inti, yaitu DocumentationPluginsManager dan DocumentationPluginsBootStrapper. Untuk DocumentationPluginsManager pertama, ini adalah kacang yang tidak mengimplementasikan antarmuka apa pun, tetapi memiliki banyak properti jenis pluginregistry, dan semuanya disuntikkan ke dalam nilai properti melalui anotasi @Autowired. Menggabungkan nama kelasnya, mudah untuk berpikir bahwa ini adalah manajer yang mengelola semua colokan. Mudah dimengerti, karena konfigurasi anotasi komponen, semua instance plug akan dipakai menjadi kacang demi musim semi, dan kemudian disuntikkan ke instance DocumentationPluginsManager ini dan dikelola secara seragam. Kelas penting lain dalam paket ini DocumentationPluginsBootStrapper, Anda dapat menebak dengan melihat namanya, itu mungkin kelas startup steker. Ketika Anda mengklik dan melihat spesifik, Anda akan menemukan bahwa itu memang komponen yang diidentifikasi oleh @Component, dan metode konstruksinya menyuntikkan instance DocumentationPluginsManager yang baru saja dijelaskan, dan yang paling kritis adalah bahwa ia juga mengimplementasikan antarmuka siklus smartlifec. Siapa pun yang mengetahui siklus hidup kacang musim semi tahu bahwa ketika komponen ini dipakai menjadi kacang dan dikelola dalam konteks SRPing, metode awal () akan dipanggil secara otomatis. Ketika Anda mengklik start () untuk melihat kode, Anda akan menemukan bahwa ia memiliki barisan kode skandokumentasi (buildContext (masing -masing)); yang digunakan untuk memindai dokumen API. Dengan melacak lebih lanjut kode metode ini, Anda dapat menemukan bahwa metode ini pada akhirnya akan menggunakan properti DocumentationPluginsManager untuk menyesuaikan semua colokan bersama -sama untuk memindai seluruh sistem dan menghasilkan dokumen API. Hasil pemindaian di -cache di properti peta dari kelas DocumentationCache.
Di atas adalah prinsip umum SRPingMVC mengintegrasikan Springfox. Ini terutama menyuntikkan serangkaian kacang ke dalam konteks SRPing melalui anotasi EnableSwagger2, dan secara otomatis memindai kelas pengontrol sistem ketika sistem dimulai, menghasilkan informasi API yang sesuai dan menacakannya. Selain itu, ia menyuntikkan beberapa kelas pengontrol yang diidentifikasi oleh anotasi @Controller sebagai entri untuk modul UI untuk mengakses daftar API. Misalnya, kelas Swagger2Controller di paket Springfox-Swagger2-2.6.1.jar. Pengontrol ini adalah alamat antarmuka yang digunakan dalam modul UI untuk mengakses daftar API. Saat Anda mengunjungi alamat http://127.0.0.1:8080/jaddemo/swagger-ui.html untuk melihat daftar API, Anda dapat melihat melalui browser bahwa itu secara tidak sinkron mendapatkan informasi API (format JSON) melalui alamat yang mirip http://127.0.0.1:8080/jaddemo/v2/api-docs?group=sysgroup dan menampilkannya di antarmuka. Entri pengontrol yang sesuai dengan latar belakang alamat ini adalah kelas SWAGGER2Controller di atas. Setelah menerima permintaan, kelas ini secara langsung mengambil informasi API dari cache yang diinisialisasi terlebih dahulu untuk menghasilkan pengembalian string JSON.
Setelah memahami prinsip -prinsip Springfox, mari kita lihat jebakan apa yang saya temui selama penggunaan Springfox.
Pit besar pertama Springfox: kacang yang dihasilkan oleh kelas konfigurasi harus berbagi konteks yang sama dengan Spring MVC.
Seperti dijelaskan di atas, dalam proyek SpringMVC, mengintegrasikan SpringFox hanya untuk menulis kelas konfigurasi sederhana sebagai berikut tanpa kode bisnis dalam proyek.
@Configuration@enableWebMvc@enableSwagger2publicclass apiconfig {}Karena anotasi @Configuration, Spring akan secara otomatis instantiasi ke dalam kacang dan menyuntikkannya ke dalam konteks. Tetapi satu jebakan yang perlu dicatat adalah bahwa konteks di mana kacang ini harus dalam konteks yang sama dengan MVC musim semi. Bagaimana cara memahami? Karena dalam proyek MVC musim semi yang sebenarnya, biasanya ada dua konteks, satu mengikuti konteks dan yang lainnya adalah Spring MVC (itu adalah subkonteks yang mengikuti konteks). Konteksnya adalah org.springframework.web.context.request.requestContextListener pendengar yang terkait dengan Spring di file web.xml. Konteks yang dimuat biasanya ditulis sebagai file konfigurasi yang disebut spring-contet.xml. Kacang di sini pada akhirnya akan diinisialisasi ke dalam konteks. Ini terutama termasuk layanan, DAO dan kacang lainnya dalam sistem, serta sumber data, benda, dll. Konteks lain adalah Spring MVC, yang dimuat melalui org.springframework.web.servlet.dispatcherServlet yang terkait dengan Spring MVC di web.xml. Biasanya memiliki file konfigurasi yang disebut spring-mvc.xml. Saat menulis kelas Apiconfig, jika kami memutuskan untuk memuatnya dengan anotasi @Configuration, kami harus memastikan bahwa jalur kelas ini berada dalam ruang lingkup paket dasar dari konfigurasi komponen-pemindaian di SpringMVC. Karena ketika apiconfig dimuat oleh pegas, serangkaian kacang akan disuntikkan. Pada kacang ini, untuk secara otomatis memindai semua kelas pengontrol, beberapa kacang perlu mengandalkan beberapa kacang di SpringMVC. Jika proyek memisahkan konteks SRPingMVC dari konteks sebagai subkonteks konteks. Jika Anda secara tidak sengaja membiarkan tipe bean apiconfig ini dimuat dengan teks sebelumnya, karena tidak ada kelas konfigurasi dalam konteks MVC musim semi dalam konteks root.
Bahkan, saya tidak setuju dengan mengonfigurasi kesombongan melalui anotasi @configuration, karena saya pikir fungsi API Swagger adalah opsional untuk proyek produksi. Kesombongan kami sering digunakan untuk menguji lingkungan untuk pengembangan tim front-end proyek atau untuk sistem lain untuk mengintegrasikan antarmuka. Setelah sistem online, ada kemungkinan bahwa daftar API ini akan disembunyikan pada sistem produksi. Tetapi jika konfigurasi ditulis dalam kode Java melalui anotasi @Configuration, maka ketika Anda ingin menghapus fungsi ini ketika Anda online, itu akan memalukan dan Anda harus memodifikasi kode Java untuk mengkomposisi ulang. Berdasarkan hal ini, saya merekomendasikan metode untuk mengonfigurasi file XML paling tradisional berdasarkan Spring. Metode spesifik adalah menghapus anotasi @configuration, dan kemudian menulis konfigurasi kacang yang mirip dengan <bean/> ke dalam file konfigurasi XML pegas. Dalam proyek di mana konteks root dipisahkan dari konteks MVC, itu secara langsung dikonfigurasi menjadi spring-mvc.xml, yang memastikan bahwa ia harus dalam konteks yang sama dengan konteks SpringMVC.
Lubang terbesar kedua dari Springfox: parameter kelas pengontrol, perhatikan untuk mencegah rekursi yang tak terbatas.
Spring MVC memiliki mekanisme pengikatan parameter yang kuat, yang secara otomatis dapat mengikat parameter permintaan ke objek perintah khusus. Oleh karena itu, agar malas, banyak pengembang secara langsung menggunakan objek entitas sebagai parameter metode pengontrol saat menulis pengontrol. Misalnya, kode contoh berikut:
@RequestMapping (value = "update") Public String Update (Menuvomenuvo, Model Model) {}Ini adalah kode yang sebagian besar programmer suka tulis di controller untuk memodifikasi suatu entitas. Saat berintegrasi dengan kesombongan, ada lubang besar di sini. Jika semua properti di Menuvo adalah tipe dasar, maka tidak apa -apa, tidak ada yang salah. Tetapi jika ada beberapa atribut tipe khusus lainnya di kelas ini, dan atribut ini secara langsung atau tidak langsung ada atribut dari jenisnya sendiri, maka akan ada masalah. Misalnya: Jika kelas Menuvo adalah kelas menu, ia juga berisi orang tua properti dari jenis Menuvo yang mewakili menu induknya. Dengan cara ini, modul Swagger akan secara langsung melaporkan kesalahan ketika sistem dimulai karena tidak dapat memuat API. Alasan kesalahan adalah bahwa saat memuat metode ini, parameter metode pembaruan akan diuraikan. Ketika parameter menuvo bukan tipe yang sederhana, semua atribut kelasnya akan secara otomatis ditafsirkan secara rekursif. Ini membuatnya mudah untuk jatuh ke loop mati rekursi tak terbatas.
Untuk mengatasi masalah ini, saya baru saja menulis kelas implementasi plug-in OperationParameterReader dan kelas alat ModelAttributeParameterExpander. Ini menggantikan dua kelas asli Srpingfox melalui konfigurasi, menggantikan logika parsing analisis parameter seperti kolom, dan menghindari rekursi yang tak terbatas. Tentu saja, ini setara dengan cara untuk memodifikasi level kode sumber. Saya belum menemukan solusi yang lebih sempurna untuk masalah ini, jadi saya hanya dapat merekomendasikan agar Anda mencoba menghindari rekursi tak terbatas ini saat menggunakan Swagger Spring-Fox. Bagaimanapun, ini tidak mematuhi spesifikasi objek perintah SpringMVC. Objek perintah dengan parameter springmvc lebih disukai hanya atribut tipe dasar sederhana.
Lubang utama ketiga Springfox: Pengelompokan API Terkait, Instance Docket tidak dapat dimuat secara laten
Springfox akan membagi semua API menjadi grup secara default. Ketika diakses melalui alamat yang mirip dengan http://127.0.0.1:8080/jaddemo/swagger-ui.html, semua daftar API akan dimuat pada halaman yang sama. Dengan cara ini, jika sistemnya sedikit lebih besar dan API sedikit lebih, halaman akan dipalsukan sampai mati, jadi sangat penting untuk mengelompokkan API. Pengelompokan API didefinisikan oleh anotasi @Bean dalam file konfigurasi APICONF. Konfigurasi Umum di Internet adalah sebagai berikut:
@EnableWebMvc@enableSwagger2publicclass apiconfig {@bean docket publik customDocket () {return newDocket (documentationType.swagger_2) .apiInfo (apiInfo ()); }}Dalam kode di atas, map disuntikkan melalui @Bean. Konfigurasi ini tidak perlu. Jika konfigurasi ini tidak tersedia, kerangka kerja akan menghasilkan instance docket default dengan sendirinya. Tujuan dari instance docket ini adalah untuk menentukan informasi publik dari semua API yang dapat dikelola, seperti informasi dasar seperti versi API, penulis, dll., Dan untuk menentukan API mana yang hanya terdaftar (difilter oleh alamat API atau anotasi).
Mungkin ada beberapa instance map, seperti kode berikut:
@EnableWebMvc@enableSwagger2publicclass apiconfig {@bean public docket customDocket1 () {return newDocket (documentationType.swagger_2) .groupName ("apigroup1"). ApiInfo (apiInfo ()). Select (). Paths1). "ApiIncors (" "ApiInfo (). } @Bean Public Docket CustomDocket2 () {return newDocket (DocumentationType.swagger_2) .groupName ("apigroup2"). Apiinfo (apiinfo ()). Select (). Paths (pathselectors.ant ("/shop/**"))); }}Ketika beberapa instance map dikonfigurasi dalam proyek, API dapat dikelompokkan, misalnya, kode di atas membagi API menjadi dua grup. Dalam hal ini, setiap kelompok harus diberi nama yang berbeda, seperti "Apigroup1" dan "Apigroup2" dalam kode di atas. Setiap grup dapat menggunakan jalur untuk menentukan grup mana yang akan mengelola API mana melalui ekspresi alamat bergaya semut. Misalnya, dalam konfigurasi di atas, kelompok alamat manajemen pertama adalah API dengan awal /sys /. Kelompok API manajemen kedua dengan awal /toko /. Tentu saja, ada banyak metode penyaringan lainnya, seperti anotasi kelas, anotasi metode, alamat ekspresi reguler, dll. Setelah pengelompokan, Anda dapat memilih berbagai grup API dalam opsi drop-down di sudut kanan atas antarmuka daftar API. Ini akan membubarkan daftar API proyek ke halaman yang berbeda. Ini akan memfasilitasi manajemen tanpa berpura -pura mati karena halaman perlu memuat terlalu banyak API.
Namun, seperti menggunakan @configuration, saya tidak setuju dengan menggunakan @Bean untuk mengonfigurasi instance map ke grup API. Karena itu, kode juga akan ditulis sampai mati. Jadi, saya sarankan mengkonfigurasi instance docket Anda sendiri di file XML untuk mengimplementasikan fungsi -fungsi serupa ini. Tentu saja, mengingat banyak atribut di map, lebih merepotkan untuk mengonfigurasi kacang secara langsung. Anda dapat menulis pabrik untuk map sendiri dan kemudian mengkonfigurasi pabrik di file XML. Namun, saat mengkonfigurasi map ke XML. Anda akan menemukan lubang besar lainnya, yaitu, metode pemuatan pegas pada kacang malas dimuat secara default. Setelah secara langsung mengonfigurasi kacang instance ini di XML. Anda akan menemukan bahwa tidak ada efek, dan tidak ada item pengelompokan dalam daftar drop-down di sudut kiri atas halaman.
Masalah ini telah mengganggu saya selama beberapa jam. Kemudian, berdasarkan pengalaman, itu berspekulasi bahwa itu mungkin karena kacang pegas malas memuat secara default, dan instance map ini belum dimuat ke dalam konteks pegas. Ternyata, tebakan saya benar. Saya tidak tahu apakah ini bug di Springfox, atau jika saya seharusnya tidak memindahkan konfigurasi docket dari kode Java asli ke file konfigurasi XML.
Jebakan lain di Springfox: Ada beberapa jebakan lain di Springfox. Misalnya, dalam anotasi @apioperation, jika atribut HTTPMethod tidak ditentukan sebagai metode GET atau POST tertentu, semua metode seperti GET, POST, DELETE, PUN akan terdaftar dalam daftar API, sehingga daftar API terlalu banyak duplikat, yang sangat jelek. Selain itu, selama pengujian, saya mengalami masalah izin login, dll. Tumpukan lubang kecil yang lebih mudah dipecahkan, karena ruang terbatas, saya tidak akan banyak bicara. Ada juga penggunaan anotasi seperti @api, @apioperation dan @Apiparam. Saya tidak akan mengulangi banyak dokumen tentang ini secara online.
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.