利用fastJson实现Object、List<S>对象值拷贝工具类【BeanCopyUtils】

目录

pom.xml引入相应Maven依赖包

BeanCopyUtils.java

工具类验证用实体信息构造

BankCard.java

UserDto.java

UserInputDto.java

UserOutputDto.java

工具类客户端调用

Client.java

工具类客户端调用控制台输出

 


pom.xml引入相应Maven依赖包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>

BeanCopyUtils.java

package com.liubin.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.parser.Feature;
import org.apache.commons.collections.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 〈功能详细描述〉
 *
 * @author 刘斌
 * @date 2020/3/6
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class BeanCopyUtils {
    /**
     * 实体值copy (参数必须同名,类型可不同)
     *
     * @param source 源对象
     * @param clazz  目标对象类型
     * @param <T>    目标对象类型
     * @return 目标对象
     * @author 刘斌
     * @date 2020/3/6
     * @see [相关类/方法](可选)
     * @since [产品/模块版本] (可选)
     */
    public static <T> T copyEntity(Object source, Class<T> clazz) {
        if (source == null) {
            return null;
        }
        return JSON.parseObject(JSON.toJSONString(source), clazz, Feature.OrderedField);
    }

    /**
     * 将源List<S> sourceList 转化为目标List<T> targetList
     *
     * @param sourceList 源List<S> sourceList
     * @param clazz      目标List<T> targetList元素类型
     * @param <S>        源List<S> sourceList元素类型
     * @param <T>        目标List<T> targetList元素类型
     * @return 目标List<T> targetList
     * @author 刘斌
     * @date 2020/3/6
     * @see [相关类/方法](可选)
     * @since [产品/模块版本] (可选)
     */
    public static <S, T> List<T> copyList(List<S> sourceList, Class<T> clazz) {
        if (CollectionUtils.isEmpty(sourceList)) {
            return new ArrayList<>();
        }
        return JSONArray.parseArray(JSON.toJSONString(sourceList), clazz);
    }
}

工具类验证用实体信息构造

BankCard.java

package com.liubin.entity;

/**
 * 〈一句话功能简述〉银行卡信息实体类<br>
 * 〈功能详细描述〉
 *
 * @author 刘斌
 * @date 2020/3/6
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class BankCard {
    /**
     * 银行卡id
     */
    private int id;
    /**
     * 银行名称
     */
    private String bankName;
    /**
     * 银行卡账号
     */
    private String account;
    /**
     * 银行卡密码
     */
    private String pwd;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBankName() {
        return bankName;
    }

    public void setBankName(String bankName) {
        this.bankName = bankName;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("BankCard{");
        sb.append("id=").append(id);
        sb.append(", bankName='").append(bankName).append('\'');
        sb.append(", accout='").append(account).append('\'');
        sb.append(", pwd='").append(pwd).append('\'');
        sb.append('}');
        return sb.toString();
    }
}

UserDto.java

package com.liubin.entity;

import java.util.List;

/**
 * 〈一句话功能简述〉用户Dto类<br>
 * 〈功能详细描述〉
 *
 * @author 刘斌
 * @date 2020/3/6
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class UserDto {
    /**
     * 用户名
     */
    private String userName;
    /**
     * 年龄
     */
    private int age;

    private String gender;
    /**
     * 银行卡信息
     */
    private List<BankCard> bankCards;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public List<BankCard> getBankCards() {
        return bankCards;
    }

    public void setBankCards(List<BankCard> bankCards) {
        this.bankCards = bankCards;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("UserDto{");
        sb.append("userName='").append(userName).append('\'');
        sb.append(", age=").append(age);
        sb.append(", gender='").append(gender).append('\'');
        sb.append(", bankCards=").append(bankCards);
        sb.append('}');
        return sb.toString();
    }
}

UserInputDto.java

package com.liubin.entity;

import java.util.List;

/**
 * 〈一句话功能简述〉用户UserInputDto类<br>
 * 〈功能详细描述〉
 *
 * @author 刘斌
 * @date 2020/3/6
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class UserInputDto {
    /**
     * 用户名
     */
    private String userName;
    /**
     * 银行卡信息
     */
    private List<BankCard> bankCards;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public List<BankCard> getBankCards() {
        return bankCards;
    }

    public void setBankCards(List<BankCard> bankCards) {
        this.bankCards = bankCards;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("UserInputDto{");
        sb.append("userName='").append(userName).append('\'');
        sb.append(", bankCards=").append(bankCards);
        sb.append('}');
        return sb.toString();
    }
}

UserOutputDto.java

package com.liubin.entity;

import java.util.List;

/**
 * 〈一句话功能简述〉用户UserOutputDto类<br>
 * 〈功能详细描述〉
 *
 * @author 刘斌
 * @date 2020/3/6
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class UserOutputDto {
    /**
     * 用户名
     */
    private String userName;
    /**
     * 年龄
     */
    private int age;
    /**
     * 性别
     */
    private String gender;
    /**
     * 银行卡信息
     */
    private List<BankCard> bankCards;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public List<BankCard> getBankCards() {
        return bankCards;
    }

    public void setBankCards(List<BankCard> bankCards) {
        this.bankCards = bankCards;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("UserDto{");
        sb.append("userName='").append(userName).append('\'');
        sb.append(", age=").append(age);
        sb.append(", gender='").append(gender).append('\'');
        sb.append(", bankCards=").append(bankCards);
        sb.append('}');
        return sb.toString();
    }
}

工具类客户端调用

Client.java

package com.liubin;

import com.liubin.entity.BankCard;
import com.liubin.entity.UserDto;
import com.liubin.entity.UserInputDto;
import com.liubin.entity.UserOutputDto;
import com.liubin.utils.BeanCopyUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 〈一句话功能简述〉BeanCopyUtils客户端调用<br>
 * 〈功能详细描述〉
 *
 * @author 刘斌
 * @date 2020/3/6
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class Client {
    public static void main(String[] args) {
        // 源实体对象(里面包含List)
        UserDto userDto = getUserInfo();
        // 只是获取部分源实体对象的值
        UserInputDto userInputDto = BeanCopyUtils.copyEntity(userDto, UserInputDto.class);
        // 只是获取全部源实体对象的值
        UserOutputDto userOutputDto = BeanCopyUtils.copyEntity(userDto, UserOutputDto.class);
        System.out.println("userInputDto" + userInputDto);
        System.out.println("============================");
        System.out.println("userOutputDto" + userOutputDto);
        // 源实体对象就是一个List
        List<UserDto> userDtoList = getUserInfos();
        List<UserDto> userInfoList = BeanCopyUtils.copyList(userDtoList, UserDto.class);
        System.out.println("============================");
        System.out.println("userDtoList" + userDtoList);
        System.out.println("userInfoList" + userInfoList);
    }

    private static UserDto getUserInfo() {
        UserDto userDto = new UserDto();
        userDto.setUserName("tom");
        userDto.setAge(20);
        userDto.setGender("man");
        BankCard bankCard = new BankCard();
        bankCard.setId(123456789);
        bankCard.setAccount("33456789");
        bankCard.setBankName("招商银行");
        bankCard.setPwd("123456");
        List<BankCard> bankCards = new ArrayList<>();
        bankCards.add(bankCard);
        userDto.setBankCards(bankCards);
        return userDto;
    }

    private static List<UserDto> getUserInfos() {
        UserDto userDto = getUserInfo();
        List<UserDto> userDtoList = new ArrayList<>();
        userDtoList.add(userDto);
        return userDtoList;
    }
}

工具类客户端调用控制台输出

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值