对BeanUtils的封装-支持对集合进行直接操作

大灰 7月前 312 阅读

BeanUtils工具介绍

BeanUtils是Apache组织下的产品,可以方便我们对JavaBean进行便利的操作,其可以完成以下几种操作:

1)beanUtils 可以便于对javaBean的属性进行赋值。

2)beanUtils 可以便于对javaBean的对象进行赋值。

3)beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

但遗憾的是,BeanUtils.copyProperties不支持直接复制集合.

这里介绍一个工具类,对BeanUtils进行了封装,使其可以方便的对集合进行操作

/**
 * 通过json序列化及反系列化copy属性信息
 */
public class BeanUtils {

    private static final DozerBeanMapper mapper = new DozerBeanMapper();

    public static <T> T copyProperties(Object source, TypeReference<T> type) {

        if(source == null) {
            throw new RuntimeException("source object is null!");
        }

        String jsonStr = JSONObject.toJSONString(source, SerializerFeature.DisableCircularReferenceDetect);
        return JSONObject.parseObject(jsonStr, type);
    }


    public static <S, T> List<T> copyProperties(List<S> origLst, Class<T> destClz) {
        List<T> destLst = new ArrayList<>();
        if(origLst == null || origLst.isEmpty()) return destLst;

        for(S orig : origLst) {
            T dest = copyProperties(orig, destClz);
            destLst.add(dest);
        }
        return destLst;
    }

    public static <S, T> T copyProperties(S orig, T dest)  {
        if(orig == null) return null;

        mapper.map(orig, dest);
        return dest;
    }

    public static <S, T> T copyProperties(S orig, Class<T> destClz) {
        if(orig == null) return null;

        return mapper.map(orig, destClz);
    }

}

使用方法

public List<MusicVo> findALL() {
   List<Music> musics = musicRepository.findAll();
   List<MusicVo> musicVos = BeanUtils.copyProperties(musics, new TypeReference<List<MusicVo>>() {
   });
   return musicVos;
}

全部评论: 0

    我有话说:
    Title - Artist
    0:00