遍历Java
实体类属性及值
核心代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(HcodeRepository.class);
/**
*
* @Title: getPostParams
* @Description: 将实体类clazz的属性转换为url参数
* @param clazz 参数实体类
* @return
* String
*/
private String getPostParams(Object clazz) {
Field[] fields = clazz.getClass().getDeclaredFields();
StringBuilder requestURL = new StringBuilder();
try {
boolean flag = true;
String property, value;
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
// 允许访问私有变量
field.setAccessible(true);
// 属性名
property = field.getName();
// 属性值
value = field.get(clazz).toString();
System.out.println(property+":"+value);
}
} catch (Exception e) {
logger.error("参数为:" + clazz.toString());
}
return requestURL.toString();
}
示例
将查询参数封装为url
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(HcodeRepository.class);
/**
*
* @Title: getPostParams
* @Description: 将实体类clazz的属性转换为url参数
* @param clazz 参数实体类
* @return
* String
*/
private String getPostParams(Object clazz) {
// 遍历属性类、属性值
Field[] fields = clazz.getClass().getDeclaredFields();
StringBuilder requestURL = new StringBuilder();
try {
boolean flag = true;
String property, value;
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
// 允许访问私有变量
field.setAccessible(true);
// 属性名
property = field.getName();
// 属性值
value = field.get(clazz).toString();
String params = property + "=" + value;
if (flag) {
requestURL.append(params);
flag = false;
} else {
requestURL.append("&" + params);
}
}
} catch (Exception e) {
logger.error("URL参数为:" + clazz.toString());
}
return requestURL.toString();
}
获取父类的属性及属性值
注: 以下代码中使用Intellij IDEA
并使用了lombok
,可以使用get/set
替代@Data
注解;可以重写toString()
方法替代@ToString
注解;
可以使用构造方法,替代@AllArgsConstructor
注解。
TextMailDTO
父类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
/**
* @ClassName TextMailDTO
* @Description <br/> 文本邮件实体类
* @Author Dew
* @Date 2019/11/7 9:56
* @Version 1.0
**/
@Data
@ToString
@AllArgsConstructor
public class TextMailDTO {
/**
* 主题
*/
private String subject;
/**
* 文本内容
*/
private String text;
/**
* 接收者邮箱
*/
private String receiver;
}
info
子类
import lombok.Data;
/**
* @ClassName Info
* @Description <br/> 信息内容
* @Author Dew
* @Date 2019/12/3 10:03
* @Version 1.0
**/
@Data
public class Info extends TextMailDTO {
private String description;
public Info(String subject, String text, String receiver) {
super(subject, text, receiver);
}
public Info(String subject, String text, String receiver, String description) {
super(subject, text, receiver);
this.description = description;
}
}
- 实现获取父类属性及属性值的方法代码块
/**
* 获取父类的属性及属性值方法
*/
private String getAllFields(Object object) {
Class clazz = object.getClass();
List<Field> fieldList = new ArrayList<>();
while (clazz != null) {
Field[] fields = clazz.getDeclaredFields();
fieldList.addAll(new ArrayList<>(Arrays.asList(fields)));
clazz = clazz.getSuperclass();
}
StringBuilder requestURL = new StringBuilder();
try {
boolean flag = true;
String property, value;
for (int i = 0; i < fieldList.size(); i++) {
Field field = fieldList.get(i);
// 允许访问私有变量
field.setAccessible(true);
// 属性名
property = field.getName();
// 属性值
value = field.get(object).toString();
log.info(property + ":\t {}", value);
}
} catch (Exception e) {
log.error("参数为:\t{}", clazz.toString());
}
return requestURL.toString();
}