Java遍历实体类,实体类属性转换为url参数

遍历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();
	}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值