详解JAVA中的@ApiModel和@ApiModelProperty注解

这篇具有很好参考价值的文章主要介绍了详解JAVA中的@ApiModel和@ApiModelProperty注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在Java中,@ApiModel和@ApiModelProperty是Swagger框架(用于API文档的工具)提供的注解,用于增强API文档的生成和展示。这两者搭配使用更佳

使用两者注解,需导入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>

主要作用:开发者对API的模型和属性进行详细的描述,以便生成清晰的API文档。

1. @ApiModel注解

  • @ApiModel注解用于对Java类进行标注,表示这个类是一个Swagger模型(Model)。通常用于描述一个数据对象或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注解
    用于指定自定义注解可以应用的程序元素类型,参数是一个ElementType数组。该源码表示应用在类上
  • @Retention注解
    用于指定自定义注解的生命周期,即注解在程序运行时的保留策略。该源码表示运行时
  • @Inherited注解
    子类会继承该注解。默认情况下,注解不会被子类继承。

对应的属性值为:

  • value属性:属性值,也就是该实体类的描述值,不写默认为实体类的名称,通常描述不清晰才需要value值
  • description属性:描述值,与value不同,该description为较长描述值
  • parent属性:用于指定被注解类的父类
  • discriminator属性:多态情境区分多个子类
  • subTypes属性:指定被注解类的子类
  • reference属性:提供对被注解类的引用信息

2. @ApiModelProperty注解

  • @ApiModelProperty注解用于对Java类的属性进行标注,表示这个属性是一个Swagger模型的属性。它可以用于描述属性的名称、说明、数据类型等信息
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属性
    注解的默认属性,理解为注释的作用
  • name属性
    指定属性或方法的名称,重写该属性名字
  • allowableValues属性
    指定属性或方法的可接受值范围。
  • access属性
    指定属性或方法的访问规则。
  • notes属性:
    提供对属性或方法的额外说明。
  • dataType属性:
    指定属性或方法的数据类型。
  • required属性:
    指定属性或方法是否为必需。
  • position属性:
    指定属性或方法在文档中的位置。
  • hidden属性:
    指定属性或方法是否应该在文档中隐藏。
  • 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 = "码农研究僧", readOnly = true)
    public String getUsername() {
        return "码农研究僧";
    }
}

3. 实战

比如应用在技术行业的某个模块,对应数据库中的entity实体类如下:

@Data
@TableName("equipment_accident_record")
@ApiModel(value = "AccidentRecord对象", description = "AccidentRecord对象")
public class AccidentRecord extends BaseEntity {

	private static final long serialVersionUID = 1L;

	/**
	* 设备编号
	*/
		@ApiModelProperty(value = "设备编号")
		private String equipmentNo;
	/**
	* 设备名称
	*/
		@ApiModelProperty(value = "设备名称")
		private String equipmentName;
	/**
	* 设备机种
	*/
		@ApiModelProperty(value = "设备机种")
		private String model;
	/**
	* 事故日期
	*/
		@ApiModelProperty(value = "事故日期")
		private String dateTime;
	/**
	* 操作者
	*/
		@ApiModelProperty(value = "操作者")
		private String operator;
	/**
	* 事故经过
	*/
		@ApiModelProperty(value = "事故经过")
		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;
	/**
	* 主管技术员
	*/
		@ApiModelProperty(value = "主管技术员")
		private String technician;


}

其前端vo类别中的类如下:文章来源地址https://www.toymoban.com/news/detail-809500.html

@Data
@ApiModel(value = "AccidentRecordVO对象", description = "AccidentRecordVO对象")
public class AccidentRecordVO extends AccidentRecord {
	private static final long serialVersionUID = 1L;

}

到了这里,关于详解JAVA中的@ApiModel和@ApiModelProperty注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring中的@Value注解详解

    概述 本文配置文件为yml文件 在使用spring框架的项目中,@Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中,我们常用的功能相对简单。本文使您系统地了解@Value的用法。 @Value 注解可以用来将外部的值动态注入到 Bean

    2024年02月06日
    浏览(50)
  • Java中的注解,自定义注解

    框架 = 注解 + 反射 + 设计模式 注解( Annotation )是从JDK5.0开始引入,以“@注解名”在代码中存在。 Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=valu

    2023年04月16日
    浏览(103)
  • Spring Boot 中的 @Field 注解详解

    Spring Boot 是目前 Java 生态圈中最受欢迎的 Web 应用开发框架之一,它提供了很多优秀的功能和工具,可以帮助开发者快速构建高效、可靠的 Web 应用程序。其中一个重要的功能就是数据绑定和验证,Spring Boot 提供了多种方式来绑定请求参数、表单数据、JSON 数据等。其中,@Fi

    2024年02月11日
    浏览(33)
  • 详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

    下文中涉及MybatisPlus的逻辑删除的知识,可看我之前这篇文章:详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章:Navicat 设置时间默认值(当前最新时间) 为了使 @JsonFormat 生效,项目必须引入 Jackson 库的相关依赖: (如果是springboot项目,可不

    2024年01月23日
    浏览(39)
  • Java注解——@Override注解(详解1)

    1、注解: 注解是 JDK 1.5 的特性 注解是给编译器或 JVM 看的,编译器或 JVM 可以根据注解来完成相应的功能。 或者叫注释类型,英文是:Annotation 注解Annotation是一种引用数据类型。编译之后也是生成xxx.class文件。 注解的语法格式: 【修饰符列表】 @interface 注解类型名{ } publ

    2024年02月03日
    浏览(44)
  • 一文详解Java自定义注解

    目录 简介 JDK注解 @Target @Retention @Documented @Inherited 第三方注解 自定义注解 举例 默认字符串注解 实现指定包名称扫描注解 注解( Annotation )是Java SE 5.0 版本开始引入的概念,它是对 Java 源代码的说明,是一种元数据(描述数据的数据)。 Java中的注解主要分为以下三类: JDK的

    2024年02月06日
    浏览(91)
  • Java注解编译期处理AbstractProcessor详解

    我们接触的注解主要分为以下两类 运行时注解 :通过反射在运行时动态处理注解的逻辑 编译时注解 :通过注解处理器在编译期动态处理相关逻辑 平时我们接触的框架大部分都是运行时注解,比如:@Autowire @Resoure @Bean 等等。 那么我们平时有接触过哪些编译期注解呢, @Lom

    2024年02月02日
    浏览(34)
  • java: 模块循环不支持注解处理。请确保将循环中的所有模块排除在注解处理之外

    java: 模块循环不支持注解处理。请确保将循环中的所有模块排除在注解处理之外 大概意思是有循环依赖问题 解决方法: 选择模块依赖项 找到需要解决依赖的模块分析依赖,删除不需要的依赖 如果出现其他问题,再根据提示添加依赖即可

    2024年02月16日
    浏览(41)
  • Java中的反射(通过反射获取类的结构、invoke方法、获取注解)

    创建运行时类的对象是反射机制应用最多的地方。创建运行时类的对象有两种方式: 方式1:直接调用Class对象的newInstance()方法 要求: 1)类必须有一个无参数的构造器。 2)类的构造器的访问权限需要足够。 方式一的步骤 : 1)获取该类型的Class对象 2)调用Class对象的 new

    2024年02月04日
    浏览(49)
  • 【Java高级语法】(十三)注解:解码程序设计中的元数据利器,在小小的@符里挖呀挖呀挖~用小小的注解做强大的开发...

    Java 注解(Annotation) 是Java语言中一种元数据形式,它提供了一种在代码中添加元数据的方式。注解为程序员提供了向代码中添加额外信息的能力,这些额外信息可以被编译器、工具或者运行时环境使用。 优点: 提供了一种 更加简洁和可读性强 的代码编写风格; 增强代码的

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包