注解类:ApiFieldAnnotation.java
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ApiFieldAnnotation {
Class fieldClassType();
boolean notNull();
int maxLength() default -1;
String fieldDesc();
int scale() default 0;
}
测试代码:
@Test
public void testMyTest() throws Exception {
MyBizPojo myBizPojo = new MyBizPojo();
myBizPojo.setAccount("1111111111");
myBizPojo.setName("CCCCCC");
List<MyReturnPojo> params = Lists.newArrayList();
java.lang.reflect.Field[] fields = myBizPojo.getClass().getDeclaredFields();
for (java.lang.reflect.Field field : fields) {
if (!field.isAnnotationPresent(ApiFieldAnnotation.class)) {
continue;
}
ApiFieldAnnotation annotation = field.getAnnotation(ApiFieldAnnotation.class);
field.setAccessible(true);
MyReturnPojo myReturnPojo =
new MyReturnPojo(field.getName(), annotation.fieldDesc(), annotation.notNull(), field.get(myBizPojo));
params.add(myReturnPojo);
}
params.forEach(p -> {
System.out.println(p);
});
}
@Data
private class MyBizPojo {
@ApiFieldAnnotation(fieldClassType = String.class, maxLength = 10, notNull = true, fieldDesc = "账号")
private String account;
@ApiFieldAnnotation(fieldClassType = String.class, maxLength = 10, notNull = true, fieldDesc = "名字")
private String name;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
private class MyReturnPojo {
private String name;
private String nameZh;
private Boolean notNullFlag;
private Object defaultValue;
}
JxbkComponentTest.MyReturnPojo(name=account, nameZh=账号, notNullFlag=true, defaultValue=1111111111)
JxbkComponentTest.MyReturnPojo(name=name, nameZh=名字, notNullFlag=true, defaultValue=CCCCCC)
备注:
Field[] | getDeclaredFields() 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。 |
boolean | isAnnotationPresent(Class<? extends Annotation> annotationClass) 如果指定类型的注释存在于此元素上,则返回 true,否则返回 false |
| getAnnotation(Class<T> annotationClass) 如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null |
Object | get(Object obj) 返回指定对象上此 Field 表示的字段的值 |