Orika:如何映射评估条件的布尔值

时间:2013-11-06 17:47:52

标签: java orika

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

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的答案解释。

感谢。

1 个答案:

答案 0 :(得分:2)

你能在类Order1中添加公共布尔值isCanceled()和布尔值isConfirmed()吗? Orika将自动映射

或者

使用你可以创建一个转换器StatusConverter接受String参数,注册它

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。