//自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface FieldName {
/** * 字段名 */
String value() default "";
/**
* 是否忽略
*/
boolean Ignore() default false;
}
//map转 bean
public static <T> T map2Bean(Map<String, Object> source, Class<T> instance) {
try {
T object = instance.newInstance();
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
FieldName fieldName = field.getAnnotation(FieldName.class);
if (fieldName != null) {
field.set(object, source.get(fieldName.value()));
} else {
field.set(object, source.get(field.getName()));
}
}
return object;
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
//bean转map
public static <T> Map bean2Map(T source) throws IllegalAccessException {
Map<Object, Object> result = new Properties();
Class<?> sourceClass = source.getClass();
//拿到所有的字段,不包括继承的字段
Field[] sourceFiled = sourceClass.getDeclaredFields();
for (Field field : sourceFiled) {
field.setAccessible(true);//设置可访问,不然拿不到private
//配置了注解的话则使用注解名称,作为header字段
FieldName fieldName = field.getAnnotation(FieldName.class);
if (fieldName == null) {
if (field.get(source)!=null)
result.put(field.getName(), field.get(source));
} else {
if (fieldName.Ignore()) continue;
result.put(fieldName.value(), field.get(source));
}
}
return result;
}