JAVA中@ApiModel和@ApiModelProperty注解實戰(zhàn)代碼
前言
在Java中,@ApiModel和@ApiModelProperty是Swagger框架(用于API文檔的工具)提供的注解,用于增強API文檔的生成和展示。這兩者搭配使用更佳
使用兩者注解,需導(dǎo)入swagger的依賴包:
<!-- https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-annotations --> <dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-annotations</artifactId> <version>2.2.19</version> </dependency>
主要作用:開發(fā)者對API的模型和屬性進(jìn)行詳細(xì)的描述,以便生成清晰的API文檔。
1. @ApiModel注解
- @ApiModel注解用于對Java類進(jìn)行標(biāo)注,表示這個類是一個Swagger模型(Model)。通常用于描述一個數(shù)據(jù)對象或DTO(Data Transfer Object)。
示例代碼:
import io.swagger.annotations.ApiModel; @ApiModel(description = "用戶信息") public class User { // 類的屬性... }
深入其源碼:
package io.swagger.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface ApiModel { String value() default ""; String description() default ""; Class<?> parent() default Void.class; String discriminator() default ""; Class<?>[] subTypes() default {}; String reference() default ""; }
源碼中的注解可看出:
@Target注解
用于指定自定義注解可以應(yīng)用的程序元素類型,參數(shù)是一個ElementType數(shù)組。該源碼表示應(yīng)用在類上@Retention注解
用于指定自定義注解的生命周期,即注解在程序運行時的保留策略。該源碼表示運行時@Inherited注解
子類會繼承該注解。默認(rèn)情況下,注解不會被子類繼承。
對應(yīng)的屬性值為:
- value屬性:屬性值,也就是該實體類的描述值,不寫默認(rèn)為實體類的名稱,通常描述不清晰才需要value值
- description屬性:描述值,與value不同,該description為較長描述值
- parent屬性:用于指定被注解類的父類
- discriminator屬性:多態(tài)情境區(qū)分多個子類
- subTypes屬性:指定被注解類的子類
- reference屬性:提供對被注解類的引用信息
2. @ApiModelProperty注解
@ApiModelProperty
注解用于對Java類的屬性進(jìn)行標(biāo)注,表示這個屬性是一個Swagger模型的屬性。它可以用于描述屬性的名稱、說明、數(shù)據(jù)類型等信息
import io.swagger.annotations.ApiModelProperty; public class User { @ApiModelProperty(value = "用戶ID", example = "123") private Long id; @ApiModelProperty(value = "用戶名", example = "john_doe") private String username; // 其他屬性... }
深入其源碼:
@Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface ApiModelProperty { String value() default ""; String name() default ""; String allowableValues() default ""; String access() default ""; String notes() default ""; String dataType() default ""; boolean required() default false; int position() default 0; boolean hidden() default false; String example() default ""; /** @deprecated */ @Deprecated boolean readOnly() default false; AccessMode accessMode() default ApiModelProperty.AccessMode.AUTO; String reference() default ""; boolean allowEmptyValue() default false; Extension[] extensions() default {@Extension( properties = {@ExtensionProperty( name = "", value = "" )} )}; public static enum AccessMode { AUTO, READ_ONLY, READ_WRITE; private AccessMode() { } } }
其屬性如下:
value屬性
:
注解的默認(rèn)屬性,理解為注釋的作用name屬性
:
指定屬性或方法的名稱,重寫該屬性名字allowableValues屬性
:
指定屬性或方法的可接受值范圍。access屬性
:
指定屬性或方法的訪問規(guī)則。notes屬性:
提供對屬性或方法的額外說明。dataType屬性:
指定屬性或方法的數(shù)據(jù)類型。required屬性:
指定屬性或方法是否為必需。position屬性:
指定屬性或方法在文檔中的位置。hidden屬性:
指定屬性或方法是否應(yīng)該在文檔中隱藏。example屬性:
提供屬性或方法的示例值。readOnly屬性(已過時):
指定屬性或方法是否為只讀。已過時,推薦使用 access 屬性。accessMode屬性:
指定訪問模式,可以是 AUTO、READ_ONLY 或 READ_WRITE。reference屬性:
提供屬性或方法的引用信息。allowEmptyValue屬性:
指定屬性或方法是否允許為空值。extensions屬性:
指定屬性或方法的擴展信息,支持一組擴展屬性。AccessMode枚舉:
屬性或方法的訪問模式,包括 AUTO、READ_ONLY 和 READ_WRITE。
下面是一個簡單的示例代碼:
import io.swagger.annotations.ApiModelProperty; public class Example { @ApiModelProperty(value = "用戶ID", example = "123", required = true) private Long userId; @ApiModelProperty(value = "用戶名", example = "碼農(nóng)研究僧", readOnly = true) public String getUsername() { return "碼農(nóng)研究僧"; } }
3. 實戰(zhàn)
比如應(yīng)用在技術(shù)行業(yè)的某個模塊,對應(yīng)數(shù)據(jù)庫中的entity實體類如下:
@Data @TableName("equipment_accident_record") @ApiModel(value = "AccidentRecord對象", description = "AccidentRecord對象") public class AccidentRecord extends BaseEntity { private static final long serialVersionUID = 1L; /** * 設(shè)備編號 */ @ApiModelProperty(value = "設(shè)備編號") private String equipmentNo; /** * 設(shè)備名稱 */ @ApiModelProperty(value = "設(shè)備名稱") private String equipmentName; /** * 設(shè)備機種 */ @ApiModelProperty(value = "設(shè)備機種") private String model; /** * 事故日期 */ @ApiModelProperty(value = "事故日期") private String dateTime; /** * 操作者 */ @ApiModelProperty(value = "操作者") private String operator; /** * 事故經(jīng)過 */ @ApiModelProperty(value = "事故經(jīng)過") private String content; /** * 損壞情況 */ @ApiModelProperty(value = "損壞情況") private String situation; /** * 事故原因 */ @ApiModelProperty(value = "事故原因") private String reason; /** * 事故類別 */ @ApiModelProperty(value = "事故類別") private String type; /** * 損失費用 */ @ApiModelProperty(value = "損失費用") private String expense; /** * 處理意見 */ @ApiModelProperty(value = "處理意見") private String opinion; /** * 主管技術(shù)員 */ @ApiModelProperty(value = "主管技術(shù)員") private String technician; }
其前端vo類別中的類如下:
@Data @ApiModel(value = "AccidentRecordVO對象", description = "AccidentRecordVO對象") public class AccidentRecordVO extends AccidentRecord { private static final long serialVersionUID = 1L; }
總結(jié)
到此這篇關(guān)于JAVA中@ApiModel和@ApiModelProperty注解的文章就介紹到這了,更多相關(guān)JAVA中@ApiModel和@ApiModelProperty注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot @Scheduled定時任務(wù)代碼實例解析
這篇文章主要介紹了Spring Boot @Scheduled定時任務(wù)代碼實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06maven報錯:Failed to execute goal on p
這篇文章主要介紹了maven報錯:Failed to execute goal on project問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04詳解Java編程中protected修飾符與static修飾符的作用
這篇文章主要介紹了Java編程中protected關(guān)鍵字與static關(guān)鍵字的作用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01Java操作itextpdf實現(xiàn)PDF添加文字,圖片和簽名
這篇文章主要為大家詳細(xì)介紹了Java如何操作itextpdf實現(xiàn)PDF添加文字,圖片和簽名等功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-01-01spring Security的自定義用戶認(rèn)證過程詳解
這篇文章主要介紹了spring Security的自定義用戶認(rèn)證過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09