Cuando se usa BeanUtils.describe para convertir un objeto en un mapa, el valor del campo de matriz solo obtiene el primer elemento

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]

Supongo que te gusta

Origin blog.csdn.net/zhangleiyes123/article/details/112311814
Recomendado
Clasificación