2

我有两个类需要映射(目前一种方式)。

class Order1 {
   int number;
   String status;
}

class Order2 {
    int number;
    boolean canceled;
    boolean confirmed;
}

我想做类似的事情:

mapperFactory.classMap(Order1.class, Order2.class)
    .map("status == 'Canceled'", "canceled")
    .map("status == 'Confirmed'", "confirmed")
    .byDefault().register();

有没有办法做这样的事情?

编辑:我尝试使用这样的 CustomMapper:

.customize(new CustomMapper<Order1, Order1>() {
    @Override
    public void mapAtoB(final Order1 a, final Order1 b, final MappingContext context) {
        String status = a.getStatus();
        b.setCanceled("Canceled".equals(status));
        b.setConfirmed("Confirmed".equals(status));
    }
})

这可行,但似乎不可能为同一对类添加许多自定义映射器。相反,正如 Sidi 的回答所解释的那样,我使用了自定义转换器。

谢谢。

4

1 回答 1

3

您可以将 public boolean isCanceled() 和 boolean isConfirmed() 添加到 Order1 类吗?Orika 将自动映射它

或者

使用你可以创建一个带有字符串参数的转换器 StatusConverter,注册它

converterFactory.registerConverter("canceled", new StatusConverter("Canceled"));
converterFactory.registerConverter("confirmed", new StatusConverter("Confirmed"));

然后

mapperFactory.classMap(Order1.class, Order2.class)
    .fieldMap("status", "canceled").converter("canceled").add()
    .fieldMap("status", "confirmed") .converter("confirmed").add()
    .byDefault().register();

此转换器应将 String 转换为 Boolean,如果给定参数等于该值,则返回 true。

于 2013-11-07T08:38:59.487 回答