获取Dto对象中的注解、属性名、属性类型、属性值
package net.qmgf.proj.wbmining.common.util;
import io.swagger.annotations.ApiModelProperty;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import net.qmgf.frame.common.base.model.BaseEntityDto;
import org.apache.commons.lang3.StringUtils;
/**
* service层通用方法
*
* @author He
* @version V1.0
* @date 2020年7月3日
*/
public class ServiceUtil {
/**
*
* @author He
* @date 2020年7月3日
* @version 1.0
*
* @param dto
* @return
*/
@SuppressWarnings("rawtypes")
public static String getDtoInfo(BaseEntityDto dto, Class clazz) {
String ret = "";
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
String name = field.getName();
String type = field.getType().toString();
String value = String.valueOf(getFieldValueByName(field.getName(), dto));
// System.out.println(field.getName());
// System.out.println(getFieldValueByName(field.getName(), dto));
// System.out.println(field.getType().toString());
// Annotation[] annotations = field.getAnnotations(); // 获取所有的注解
ApiModelProperty api = field.getDeclaredAnnotation(ApiModelProperty.class); // 获取指定的注解
if (api != null && StringUtils.isNotEmpty(api.value())) {
// System.out.println(api.value());
ret += api.value() + ":" + value + ";";
}
}
return ret;
}
/**
* Dto比较
*
* @author He
* @date 2020年7月3日
* @version 1.0
*
* @param srcDto
* 修改前
* @param targetDto
* 修改后
* @return
*/
@SuppressWarnings("rawtypes")
public static String getDtoCompare(BaseEntityDto srcDto, BaseEntityDto targetDto, Class clazz) {
String ret = "";
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
String name = field.getName();
String type = field.getType().toString();
String srcValue = String.valueOf(getFieldValueByName(field.getName(), srcDto));
String targetValue = String.valueOf(getFieldValueByName(field.getName(), targetDto));
ApiModelProperty api = field.getDeclaredAnnotation(ApiModelProperty.class); // 获取指定的注解
if (api != null && StringUtils.isNotEmpty(api.value())) {
if (!StringUtils.equals(srcValue, targetValue)) {
ret += api.value() + ":" + srcValue + "->" + targetValue + ";";
}
}
}
return ret;
}
/**
* 根据属性名获取属性值
*
* @author He
* @date 2020年7月3日
* @version 1.0
*
* @param fieldName
* @param o
* @return
*/
public static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
// log.error(e.getMessage(),e);
return null;
}
}
}
BaseEntityDto
package net.qmgf.frame.common.base.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.Date;
/**
* @author
* @version V1.0
* @Package net.qmgf.frame.common.base.model
* @Description: 所有根据Entity生成的DTO
* @date 2017 /3/10 14:33
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ToString
public class BaseEntityDto extends BaseDto {
private String id;
/**
* 版本号
*/
private Integer versionNum;
/**
* 逻辑删除标识
*/
private String deleteFlag;
/**
* 创建者
*/
protected String createUser;
/**
* 创建日期
*/
protected Date createDate;
/**
* 更新者
*/
protected String updateUser;
/**
* 更新日期
*/
protected Date updateDate;
}
Dto
package
net.qmgf.proj.wbmining.base.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import net.qmgf.frame.common.base.model.BaseEntityDto;
/**
* 基础数据系统日志
* @author He
* @date 2020年7月7日
* @version 1.0
*
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value = "")
public class BaseLogDto extends BaseEntityDto {
private static final long serialVersionUID = 1L;
/**
* 日志内容
*/
@ApiModelProperty(value = "日志内容")
private String content;
/**
* 模块类型
*/
@ApiModelProperty(value = "模块类型")
private String moduleType;
/**
* 操作类型
*/
@ApiModelProperty(value = "操作类型")
private String operateType;
}