public static JSONObject objToJSONObject(Object obj) throws Exception{
//创建一个 HashMap 对象 map,用于存储对象的属性名和属性值。
//key 是属性名(String 类型),value 是属性值(Object 类型)
Map<String, Object> map = new HashMap<>();
//BeanInfo 包含了对象的所有属性描述符(PropertyDescriptor),用于访问对象的属性。
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
//遍历 BeanInfo 中的所有属性描述符 PropertyDescriptor。
//每个 PropertyDescriptor 对应对象的一个属性
for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
//获取当前属性的名称,并赋值给 name
String name = pd.getName();
//如果属性名是 "class",则跳过该属性。
//因为 class 是 Java 对象的默认属性,表示对象的类信息,通常不需要转换为 JSON
if ("class".equals(name)) continue;
//使用 PropertyDescriptor 的 getReadMethod 方法获取属性的读取方法(getter)。
//通过 invoke(obj) 调用该 getter 方法,获取属性的值,并赋值给 value
Object value = pd.getReadMethod().invoke(obj);
if (null != value && !value.equals("")) { // 过滤 null 值和空字符串
//如果属性值是 Date 类型,则将其转换为时间戳(long 类型),再调用 timestamp2Datetime 方法将时间戳转换为日期时间字符串
if (value instanceof Date) {
value = timestamp2Datetime(((Date) value).getTime());
}
map.put(name, value);
}
}
return new JSONObject(map);
}
/**
* 时间戳转为日期
*/
public static String timestamp2Datetime(long timestamp) {
if (0 != timestamp) {
//将long型时间戳转换为时间
Date date = new Date(timestamp);
//转换为字符串输出
return date2Str(date, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
return null;
}
/**
* 日期转换为字符串(指定日期和格式)
*/
public static String date2Str(Date date, SimpleDateFormat sdf) {
if (null == date) {
return null;
}
return sdf.format(date);
}
测试案例效果