首页 > 解决方案 > 为什么 BeanCopier 不能复制属性?

问题描述

我想使用 BeanCopier 在以下两个多孔之间进行属性复制

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("t_order")
public class Order extends BaseEntity {
    private static final long serialVersionUID=1L;
    private Long userId;
    private Integer amount;
    private Long productId;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderDTO {
    private Long userId;
    private Integer amount;
    private Long productId;
}

对于以下代码,

    public static void main(String[] args) {
        Order order = Order.builder().productId(3333L).userId(9999L).amount(32).build();
        OrderDTO orderDTO = new OrderDTO();
        BeanCopier orderCopier = BeanCopier.create(Order.class, OrderDTO.class, false);
        orderCopier.copy(order, orderDTO, null);
        JSONUtils.toJSONString(orderDTO);
    }

orderDTO的属性没有设置,字段orderDTO都是null,怎么回事?

标签: javaspring

解决方案


哦,缺少简单的东西,请添加 getter 和 setter,BeanCopier 内部使用 ReflectUtils 来查找 getter 和 setter。

请尝试添加这些,然后进行测试。

还有一种选择——

您可以简单地使用 Spring 的 BeanUtils 和它的 copyProperties - 有多个选项可用

Spring BeanUtils

您可以简单地将其用作

 BeanUtils.copyProperties( sourceBean , targetBean );

你可以在这里找到不同的例子


推荐阅读