我有两个类需要映射(目前是一种方式)。
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 的回答所解释的那样。
谢谢。
最佳答案
您可以将 public boolean isCanceled() 和 boolean isConfirmed() 添加到类 Order1 中吗? Orika 会自动映射它
或者
使用您可以创建一个带有 String 参数的转换器 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();
此转换器应将字符串转换为 boolean 值,如果给定参数等于该值,则返回 true。
关于java - Orika:如何映射评估条件的 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819104/