1、还是使用我们的老朋友hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.0</version>
</dependency>
2、实体类
package com.lezu.springboot.common.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
public class UserDto {
private String name;
private Integer qty;
private BigDecimal money;
private List<String> role;
}
3、复制map到对象
package com.lezu.springboot.test.lian;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.lezu.springboot.common.dto.UserDto;
import java.util.HashMap;
import java.util.Map;
public class Test2 {
public static void main(String[] args) {
UserDto userDto = new UserDto();
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("qty", "111");
map.put("money", "10000");
BeanUtil.copyProperties(map, userDto);
System.out.println(userDto);
System.out.println(JSON.toJSONString(userDto));
}
Map里面放List
package com.lezu.springboot.test.lian;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.lezu.springboot.common.dto.UserDto;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test2 {
public static void main(String[] args) {
UserDto userDto = new UserDto();
Map<String, Object> map = new HashMap<>();
List<String> role = new ArrayList<>();
role.add("100");
role.add("200");
role.add("300");
map.put("role", role);
BeanUtil.copyProperties(map, userDto);
System.out.println(userDto);
System.out.println(JSON.toJSONString(userDto));
}
}
3、复制List到对象
package com.lezu.springboot.common.dto.in;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
public class InUserDto {
private String name;
private Integer qty;
private BigDecimal money;
}
List复制
package com.lezu.springboot.test.lian;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.lezu.springboot.common.dto.UserDto;
import com.lezu.springboot.common.dto.in.InUserDto;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List<InUserDto> list = new ArrayList<>();
list.add(new InUserDto("张三", 111, new BigDecimal("10000")));
list.add(new InUserDto("李四", 222, new BigDecimal("10000")));
list.add(new InUserDto("小王", 333, new BigDecimal("10000")));
List<UserDto> userDtoList = BeanUtil.copyToList(list, UserDto.class);
System.out.println(userDtoList);
System.out.println(JSON.toJSONString(userDtoList));
}
}
4、我们再试试使用org.springframework.beans.BeanUtils的包复制试试
复制Map
Map中放List进行复制
复制List
package com.lezu.springboot.test.lian;
import com.alibaba.fastjson.JSON;
import com.lezu.springboot.common.dto.UserDto;
import com.lezu.springboot.common.dto.in.InUserDto;
import org.springframework.beans.BeanUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List<UserDto> userDtoList = new ArrayList<>();
List<InUserDto> list = new ArrayList<>();
list.add(new InUserDto("张三", 111, new BigDecimal("10000")));
list.add(new InUserDto("李四", 222, new BigDecimal("10000")));
list.add(new InUserDto("小王", 333, new BigDecimal("10000")));
BeanUtils.copyProperties(list, userDtoList);
System.out.println(userDtoList);
System.out.println(JSON.toJSONString(userDtoList));
}
}
很显然使用org.springframework.beans.BeanUtils复制Map和List是不行的
PS:
- 面对不同的业务场景可以选择使用不同包中的方法
- 对象copy对象建议最好还是用org.springframework.beans.BeanUtils
- 可以参考:实体类中Date转时间戳(Long) BeanUtils的正确使用