我需要映射两个类(目前只有一种方式)。
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的答案解释。
感谢。
答案 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。