一、使用@ApiModelProperty 获取注释信息 需要引入 swagger 依赖
①先引入swagger依赖
在 Maven 项目中引入 Swagger 依赖是第一步,目的是为了能够使用 Swagger 的注解,如 @ApiModelProperty
。这是必要的,因为没有这些依赖,编译器将无法识别这些注解。
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
②准备实体类 注意(swagger 依赖没有加载无法使用@ApiModelProperty 注解)
在这个例子中,我们定义了一个名为 OrderCsv
的 Java 类。这个类实现了 Serializable
接口,表示它的对象可以被序列化。我们使用 @Data
注解(通常来自 Lombok)来自动生成 getter 和 setter 方法。
@Data
public class OrderCsv implements Serializable {
/**
* 名称
*/
@ApiModelProperty("名称")
private String name;
/**
* 年龄
*/
@ApiModelProperty("年龄")
private String age;
/**
* id
*/
@ApiModelProperty("id")
private String id;
}
详细字段解释
@ApiModelProperty("名称")
:这个注解为name
字段添加描述。Swagger 将使用这个描述生成 API 文档。private String name;
:这是字段的声明,private
修饰符表示该字段只能在OrderCsv
类内部访问。
二、具体方法使用main方法测试
public static void main(String[] args) {
//获取对象 属性注释 准备集合接收 字段注释
List<String> list = new ArrayList<>();
//加载类
Class<OrderCsv> orderDtoClass = OrderCsv.class;
/*
* 1.getDeclaredFields 获取当前类的所有字段,包括protected/默认/private修饰的字段;不包括父类public修饰的字段
* 2.getFields 方法获取当前类或父接口的public修饰的字段
* 当前使用1就ok 根据需要修改方法
*/
Field[] declaredFields = orderDtoClass.getDeclaredFields();
//遍历数据
for (Field declaredField : declaredFields) {
//isAnnotationPresent 查看当前字段是否加有@ApiModelProperty注解
boolean annotation = declaredField.isAnnotationPresent(ApiModelProperty.class);
// true 是含有 含有再获取添加到list中
if (annotation) {
String value = declaredField.getAnnotation(ApiModelProperty.class).value();
list.add(value);
}
}
}
List<String> list = new ArrayList<>();
:我们创建一个列表,用于存储所有字段的注释信息。Class<OrderCsv> orderDtoClass = OrderCsv.class;
:我们获取OrderCsv
类的Class
对象,这样就可以使用反射来获取类的元信息。Field[] declaredFields = orderDtoClass.getDeclaredFields();
:这行代码获取OrderCsv
类中声明的所有字段,包括private
、protected
和默认访问级别的字段,但不包括父类的字段。for (Field declaredField : declaredFields)
:遍历获取到的所有字段。declaredField.isAnnotationPresent(ApiModelProperty.class)
:检查当前字段是否有@ApiModelProperty
注解。declaredField.getAnnotation(ApiModelProperty.class).value()
:如果有注解,则获取注解的value
属性,该属性包含字段的描述。list.add(value);
:将获取到的描述添加到列表中。
三、反射的优缺点
优点:
- 灵活性:反射使得代码更加动态,可以在运行时获取类的信息,适用于某些需要动态处理类的场景。
- 元编程:允许开发者编写更通用的代码,比如框架、库和工具。
缺点:
- 性能开销:反射操作通常比直接访问要慢,因为它需要在运行时解析类的信息。
- 安全性:使用反射可能会绕过 Java 的访问控制,可能导致安全隐患。
- 复杂性:反射代码通常比常规代码更复杂,调试和维护起来也较困难。
注意点: 1.实体类字段是否添加@ApiModelProperty 注解
2.实体类字段修饰符问题 根据修饰符使用不同的方法