Escenario: durante el proceso de desarrollo, los valores de dos entidades de objeto deben compararse
Procesamiento: Utilice BeanUtils.describe para convertir dos objetos en Map para recorrer y comparar datos. Nota:
BeanUtils está bajo org.apache.commons.beanutils
Pregunta: Se encuentra que el tipo genérico del mapa después de la conversión de BeanUtils.describe es <String, String>. Si el campo obtenido en este momento es un tipo de matriz, solo se obtiene el primer elemento
Solución: El tipo genérico del mapa obtenido mediante el método PropertyUtils.describe es <String, Object>. En este momento, los datos se pueden obtener normalmente
Tanto BeanUtils.describe como PropertyUtils.describe convierten objetos en mapas. Si el campo del objeto tiene un tipo de matriz o colección, utilice PropertyUtils.describe.
Map <String, String> map = BeanUtils.describe (Objeto bean);
Map <String, Object> map = PropertyUtils.describe (bean de objeto);
el código se muestra a continuación:
@Data
public class Person implements Serializable {//实体
/**
*
*/
private static final long serialVersionUID = 3193754045080382621L;
private String name;
private Integer sex;
private Integer age;
private String school;
private String[] hobby;
private List<String> place;
}
public static void main(String[] args) {//测试
Person p = new Person();
p.setName("Akili");
p.setSex(1);
p.setAge(24);
p.setSchool(null);
p.setHobby(new String[] { "摄影", "旅行", "家居", "做饭" });
p.setPlace(Lists.newArrayList("北京","深圳","广州","北海"));
Map<String, String> beanLog = new HashMap<String, String>();
Map<String, Object> propertyLog = new HashMap<String, Object>();
try {
beanLog = BeanUtils.describe(p);
} catch (Exception e) {
LOG.info("error message", e);
return;
}
try {
propertyLog = PropertyUtils.describe(p);
} catch (Exception e) {
LOG.info("error message", e);
return;
}
if (beanLog != null && propertyLog != null) {
for (Map.Entry<String, String> entry : beanLog.entrySet()) {
Map<String, String> temp = new HashMap<String, String>();
if (entry.getKey().equals("hobby")) {
System.out.println("beanLog hobby --- :" + entry.getValue());
System.out.println("propertyLog hobby --- :" + Arrays.toString((String[])propertyLog.get(entry.getKey())));
}
if(entry.getKey().equals("place")){
System.out.println("beanLog place --- :" + entry.getValue());
System.out.println("propertyLog place --- :" + propertyLog.get(entry.getKey()));
}
}
}
}
Resultado:
beanLog place --- : BeijingpropertyLog place ---:
[Beijing, Shenzhen, Guangzhou, Beihai]
beanLog hobby ---: photographypropertyLog
hobby ---: [fotografía, viajes, hogar, cocina]