Spring Data REST API集成Springfox、Swagger

原文: Documenting a Spring Data REST API with Springfox and Swagger

使用Spring Date REST,你可以迅速為Spring Date repositories的創建REST API,并提供CRUD和更多功能。然而,在嚴謹的API開發過成功,您還希望擁有自動生成的最新API文檔。

Code Example

本文附帶了工作示例代碼[github]()

Swagger提供了一個用于記錄REST API的規范。通過使用Springfox,我們有一個工具可以作為Spring應用程序和Swagger之間的橋梁,為某些Spring bean和注釋創建一個Swagger文檔。

Springfox最近還添加了一個為Spring Data REST API創建Swagger文檔的功能。 這個功能還在孵化,但是我仍然玩了一下,以評估它是否可以在真實項目中使用。 因為如果是這樣,Spring Data REST和Springfox的結合將允許快速開發一個記錄良好的REST API。

請注意,截至目前(版本2.7.0),用于Spring Data REST的Springfox集成仍處于孵化階段,并且存在一些嚴重的錯誤和缺少的功能(例如,請參閱此處和此處)。 因此,下面的說明和代碼示例基于當前的2.7.1-SNAPSHOT版本,其中可以大大改進。

在Spring Boot / Spring Data REST應用程序中啟用Springfox

為了使Springfox能夠為我們的Spring Data REST API創建一個Swagger文檔,您必須執行以下步驟。

添加Springfox依賴

將以下依賴項添加到您的應用程序(gradle)中:

compile('io.springfox:springfox-swagger2:2.7.0')
compile('io.springfox:springfox-data-rest:2.7.0')
compile('io.springfox:springfox-swagger-ui:2.7.0')
  • springfox-swagger2包含Springfox的核心功能,允許使用Swagger 2創建API文檔。
  • springfox-data-rest包含為Spring Data REST存儲庫自動創建Swagger文檔的集成。
  • springfox-swagger-ui包含Swagger UI,它在http:// localhost:8080 / swagger-ui.html中顯示Swagger文檔

配置Application

按下面的方法配置Spring Boot Application:

@SpringBootApplication
@EnableSwagger2
@Import(SpringDataRestConfiguration.class)
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
  • @EnableSwagger2注解通過在Spring應用程序上下文中注冊某些bean來啟用Swagger 2支持。
  • @Import注釋將額外的類導入到Spring應用程序上下文中,這些需要從Spring Data REST存儲庫自動創建Swagger文檔。

創建Docket bean

你可以選擇創建一個Docket類型的Spring bean。 這將被Springfox拿起來配置一些swagger文檔輸出。

@Configuration
public class SpringfoxConfiguration {@Beanpublic Docket docket() {return new Docket(DocumentationType.SWAGGER_2).tags(...).apiInfo(...)...}}

Spring Data repositories添加注解

另外可選地,您可以使用@Api,@ApiOperation和@ApiParam注釋來注釋由Spring Data REST公開的Spring Data存儲庫。 以下更多細節。

輸出

最后,通過訪問瀏覽器中的http:// localhost:8080 / swagger-ui.html,您應該能夠查看Spring Data REST API的Swagger文檔。 結果應該如下圖所示。

image

自定義輸出

上圖中的數字顯示了一些可以自定義生成的API文檔中的東西的地方。 以下各節介紹了我認為重要的一些定制。 你可以定制超過我發現的東西,所以隨時添加評論,如果你發現我錯過的東西!

通用的API信息

像標題,描述,許可等信息可以通過創建一個 Docket bean來配置,如上面的代碼片段,并使用其setter來更改所需的設置。

Repository描述

可以通過創建一個名稱與默認API名稱完全相同的標記(示例中的“地址實體”)來更改存儲庫的描述,并向 Docket 對象中的此標記提供描述,并使用 @Api 將該標記庫與該標記庫相連接 注解。 到目前為止,我找不到修改存儲庫名稱的方法。

@Configuration
public class SpringfoxConfiguration {@Beanpublic Docket docket() {return new Docket(DocumentationType.SWAGGER_2).tags(new Tag("Address Entity", "Repository for Address entities"));}}@Api(tags = "Address Entity")
@RepositoryRestResource(path = "addresses")
public interface AddressRepository extends CrudRepository<Address, Long> {// methods omitted
}

方法描述

對單個API操作的描述可以通過 @ApiOperation 注釋來修改,如下所示:

public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {@ApiOperation("find all Addresses that are associated with a given Customer")Page<Address> findByCustomerId(@Param("customerId") Long customerId, Pageable pageable);}

輸入參數

輸入參數的名稱和描述可以使用 @ApiParam 注釋進行配置。 請注意,從Springfox 2.7.1開始,參數名稱也從Spring Data提供的 @Param 注釋中讀取。

public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {Page<Address> findByCustomerId(@Param("customerId") @ApiParam(value="ID of the customer") Long customerId, Pageable pageable);}

響應

可以使用 @ApiResponses@ApiResponse 注解來調整不同的響應狀態及其有效payload:

public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {@Override@ApiResponses({@ApiResponse(code=201, message="Created", response=Address.class)})Address save(Address address);}

結論

Spring Data REST允許您在創建數據庫驅動的REST API時產生快速結果。 Springfox允許您快速生成該API的自動文檔。但是,由Springfox生成的API文檔與每個細節中的實際API都不匹配。一些手動微調和注釋是必要的,如上面的定制部分所述。

一個這樣的例子是,示例請求和響應的JSON在每種情況下都不能正確地呈現,因為Spring Data REST使用HAL格式,Springfox僅在少數情況下使用。通過手動工作,API文檔很難保持每個細節的最新狀態。

我的結論是,Spring Data REST和Springfox的結合是一個很好的起點,可以快速生成一個REST API,它的文檔對于大多數用例來說足夠好,特別是當API是在一組封閉的開發人員中開發和使用的時候。對于公共API,細節更重要一點,讓Swagger注釋和Springfox配置保持最新的每個細節可能令人沮喪。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283894.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283894.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283894.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【系統設計】S3 對象存儲

在本文中&#xff0c;我們設計了一個類似于 Amazon Simple Storage Service (S3) 的對象存儲服務。S3 是 Amazon Web Services (AWS) 提供的一項服務&#xff0c; 它通過基于 RESTful API 的接口提供對象存儲。根據亞馬遜的報告&#xff0c;到 2021 年&#xff0c;有超過 100 萬…

轉: telnet命令學習

1.每天一個linux命令&#xff08;58&#xff09;&#xff1a;telnet命令 轉自&#xff1a; http://www.cnblogs.com/peida/archive/2013/03/13/2956992.html telnet命令通常用來遠程登錄。telnet程序是基于TELNET協議的遠程登錄客戶端程序。Telnet協議是TCP/IP協議族中的一員&a…

禪道、碼云、coding、redmine、jira、teambition幾大敏捷開發項目管理系統試用對比體驗

作為一個軟件公司的管理人員&#xff0c;在項目和人員多起來后&#xff0c;就需要通過系統來對項目和人員進行管理。 我們是典型的軟件外包公司&#xff0c;專為客戶定制軟件&#xff0c;所以我們的業務都是項目型的。因此&#xff0c;在管理模式上&#xff0c;我們就要用所謂…

Dubbo中的SPI機制

Dubbo中的SPI機制 概述 Service Provider Interface 即 SPI&#xff0c;是JDK內置的一種服務提供發現機制&#xff0c;可以用來啟用框架擴展和替換組件。可以讓不同的廠商針對統一接口編寫不同的實現 SPI實際上是“接口策略模式配置文件”實現的動態加載機制。在系統設計中&…

JWT:擁有我,即擁有權力

Hi&#xff0c;這里是桑小榆。上篇文章中&#xff0c;我們一起探討了 OAuth 協議的原理以及授權認證流程&#xff0c;本次我們一起探討 jwt 令牌作為授權協議的傳輸介質。OAuth協議規范了幾個參與角色的授權標準&#xff0c;安全可控的授予第三方應用&#xff0c;第三方應用獲取…

雙十一到來之前,阿里AI設計師“魯班”1天能做4000萬張海報

相比較去年&#xff0c;“魯班”的設計技藝有所提升。 人工智能很大程度上便利了我們的生活&#xff0c;現在他們甚至還能取代了一些設計師的工作&#xff0c;在雙十一正式到來之前&#xff0c;淘寶的宣傳已經鋪天蓋地&#xff0c;然而很多人都沒想到&#xff0c;我們打開淘寶…

Appium移動自動化測試之獲取appPackage和appActivity

方法一&#xff1a;直接打開Appium,點擊左上角機器人圖標 選擇apk所在位置&#xff0c;如圖所示&#xff0c;這里以ContactManager.apk為例 方法二&#xff1a;利用dex2jar和jd-gui這兩個工具反編譯apk文件 這里仍以ContactManager.apk為例 (1)重命名ContactManager.apk為Conta…

CAD轉WPF: 關于CAD圖紙文件轉換為WPF矢量代碼文件(xaml文件)的技巧

前言&#xff1a;下面的文章&#xff0c;我將會以幾個很簡單的步驟&#xff0c;來演示一下通過CAD圖紙轉換為XAML代碼文件的方法&#xff0c;供大佬們參考。一、為了演示一個簡單的操作&#xff0c;我此處先打開一個空白的CAD&#xff0c;等下用來進行繪制點內容使用。二、自定…

python之新式類與經典類

經典類與新式類經典類:P 或 P()--深度查找&#xff0c;向上查父節點新式類 :P(object)---廣度查找&#xff0c;繼承object&#xff0c;新式類的方法較多轉載于:https://www.cnblogs.com/zyy98877/p/8574983.html

Flowportal-BPM——環境配置

環境配置&#xff1a; 一、控制面板→程序和功能→打開或不關閉Window功能→選擇選項 二、控制面板→管理工具→Internet信息服務&#xff08;IIS&#xff09;管理器→左側第一個→ISAPI和CGI限制→全部選為【允許】 三、控制面板→管理工具→Internet信息服務&#xff08;IIS&…

一篇文章帶你搞懂什么是DevOps?

DevOps DevOps 它的英文發音是 /de’v?ps/&#xff0c;類似于“迪沃普斯”&#xff0c;一詞本身是對于 development 以及 operation 兩個詞的混合&#xff0c;其目的在于縮短系統開發的生命周期&#xff0c;在這過程中發布特性、修復bug以及更新均被緊密的結合。 簡化的含義為…

iOS 時間戳的轉換

在開發iOS程序時&#xff0c;有時候需要將時間格式調整成自己希望的格式&#xff0c;這個時候我們可以用NSDateFormatter類來處理。例如&#xff1a; //實例化一個NSDateFormatter對象 NSDateFormatter *dateFormatter [[NSDateFormatter alloc] init]; //設定時間格式,這里可…

微服務架構下分布式事務解決方案 —— 阿里GTS

1 微服務的發展 微服務倡導將復雜的單體應用拆分為若干個功能簡單、松耦合的服務&#xff0c;這樣可以降低開發難度、增強擴展性、便于敏捷開發。當前被越來越多的開發者推崇&#xff0c;很多互聯網行業巨頭、開源社區等都開始了微服務的討論和實踐。Hailo有160個不同服務構成&…

重要消息丨.NET Core 3.1 將于今年12月13日結束支持

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;5分鐘).NET Core 3.1 將于 2022 年 12 月 13 日結束支持。此后&#xff0c;Microsoft 將不再為 .NET Core 3.1 提供服務更新或技術支持。我們建議盡快遷移到 .NET 6。如果您在支持日期結束后仍在使用 .NET Core 3.1&a…

產品設計的三大原則

1.它有用嗎? 如果我們必須從這三個特性中選擇一個作為最重要的&#xff0c;那就是有用性。 首要的是&#xff0c;一個產品必須有用。如果它無用&#xff0c;其它任何東西都是不相關的&#xff0c;因為沒有人會需要它。很明顯&#xff0c;有用性和可享用性看上去一樣重要&#…

常用的17個運維監控系統

1. Zabbix Zabbix 作為企業級的網絡監控工具&#xff0c;通過從服務器&#xff0c;虛擬機和網絡設備收集的數據提供實時監控&#xff0c;自動發現&#xff0c;映射和可擴展等功能。 Zabbix的企業級監控軟件為用戶提供內置的Java應用服務器監控&#xff0c;硬件監控&#xff0c…

關于html-三角的制作

因為最近看到別人寫的不錯的樣式&#xff0c;所以就想自己實現&#xff0c;但是呢用到了一個三角形&#xff0c;所以稍微研究一下。效果是這樣的&#xff1a;注意是下邊那個淺色三角&#xff0c;感覺書簽的效果有木有。看著很有層次感。接下來就是實現了&#xff0c;利用border…

ABP中的數據過濾器

本文首先介紹了ABP內置的軟刪除過濾器(ISoftDelete)和多租戶過濾器(IMultiTenant)&#xff0c;然后介紹了如何實現一個自定義過濾器&#xff0c;最后介紹了在軟件開發過程中遇到的實際問題&#xff0c;同時給出了解決問題的一個未必最優的思路。一.預定義過濾器ABP中的數據過濾…

ActiveMQ與spring整合

2019獨角獸企業重金招聘Python工程師標準>>> 1 生產者 第一步&#xff1a;引用相關的jar包。 <dependency> <groupId>org.springframework</groupId><artifactId>spring-jms</artifactId> </dependency> <dependency><…

最新遠程部署運維工具匯總

一&#xff0e;Puppet 轉載https://baike.baidu.com/item/puppet/5109503?fraladdin puppet是一種Linux、Unix、windows平臺的集中配置管理系統&#xff0c;使用自有的puppet描述語言&#xff0c;可管理配置文件、用戶、cron任務、軟件包、系統服務等。puppet把這些系統實體…