swagger2 列舉屬性在api文件中展示實現

2021-10-06 07:23:31 字數 2935 閱讀 4922

在請求或者返回引數的物件中,會出現一些屬性對應提列舉型別,比如:狀態、優先順序等等。

如果在@apimodelproperty裡編號,會出現少寫漏寫等情況,這樣api文件資訊就不全面。

動態的獲取列舉型別資訊,通過攔截生成swagger doc的過程,在這個過程判斷字段是否是列舉字段,遍歷完後設定到description中

對數值和列舉做替換

@component

@primary

@slf4j

public

class

swaggerdisplayconfig

implements

modelpropertybuilderplugin")

private boolean enableswagger;

@override

public

void

(modelpropertycontext context)

//獲取當前欄位的型別

final class fieldtype

= context.

getbeanpropertydefinition()

.get()

.getfield()

.getrawtype()

;//為列舉字段設定注釋

descforenumfields

(context, fieldtype);}

/** * 為列舉字段設定注釋

*/private

void

descforenumfields

(modelpropertycontext context, class fieldtype)if

(context.

getbeanpropertydefinition()

.ispresent()

)//沒有@apimodelproperty 或者 notes 屬性沒有值,直接返回if(

!annotation.

ispresent()

|| stringutils.

isblank

((annotation.

get())

.notes()

))//@apimodelproperties中的notes指定的class型別

class rawprimarytype

;try

catch

(classnotfoundexception e)

//如果對應的class是乙個@swaggerdisplayenum修飾的列舉類,獲取其中的列舉值

object[

] subitemrecords = null;

swaggerdisplayenum swaggerdisplayenum = annotationutils

.findannotation

(rawprimarytype, swaggerdisplayenum.

class);

if(null != swaggerdisplayenum && enum.

class

.isassignablefrom

(rawprimarytype))if

(null == subitemrecords)

final list

displayvalues = arrays.

stream

(subitemrecords)

.filter

(objects:

:nonnull)

.map

(item -

>).

filter

(objects:

:nonnull)

.collect

(collectors.

tolist()

);string jointext =

" ("

+ string.

join

("; "

, displayvalues)

+")"

;try

catch

(exception e)

final resolvedtype resolvedtype = context.

getresolver()

.resolve

(fieldtype)

; context.

getbuilder()

.description

(jointext)

.type

(resolvedtype);}

@override

public

boolean

supports

(documentationtype documentationtype)

}

指明需要顯示在swagger上的列舉

@target()

@retention

(retentionpolicy.runtime)

public @inte***ce

swaggerdisplayenum

@swaggerdisplayenum()

public

enum codedenum

@override

public string tostring()

}

在對應屬性上的@apimodelproperty中,notes寫明對應的列舉類的路徑

Num 2 列舉 窮舉 演算法

可預先確定候選答案的數量 候選答案的範圍在求解之前必須有乙個確定的集合。例項1 填數遊戲 演算法描述題 x 算 題題題題題題 include stdafx.h include int main getchar return 0 例項2 填運算子 5 5 5 5 5 5 由於算術表示式的特殊性,在程式...

藍橋杯備戰(2)列舉專題

字串處理 字串的實用函式 二分法對列舉的優化 查詢 核心 int left 0,right x,mid x表示二分物件的長度 mid left right 2 while left right else if mid標記對列舉的優化 flag n.標記 標識 作為乙個指示針對陣列中所需要的元素進行標...

6 1 列舉物件屬性的工具函式

extend o,p 惡性合併,用p中的同名屬性覆蓋掉o中的同名屬性var p1 var p2 惡性合併,即 存在同名屬性時,覆蓋掉o中的屬性 function extend o,p 返回合併後的物件 return o var res extend p1,p2 console.log p1 p1 被...