- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何以编程方式为推土机设置自定义转换器?以下代码不起作用:
自定义转换器实现:
class ConverterImpl extends DozerConverter<A, B> {
ConverterImpl() {
super(A.class, B.class);
}
@Override
public B convertTo(A source, B destination) {
return destination;
}
@Override
public A convertFrom(B source, A destination) {
return destination;
}
}
测试代码:
DozerBeanMapper mapper = new DozerBeanMapper();
mapper.setCustomConverters(Collections.<CustomConverter>singletonList(new ConverterImpl()));
A a = new A();
B b = mapper.map(a, A.class);
运行上面的代码后,自定义转换器不会被调用。怎么了?
最佳答案
看起来您必须实际添加一个特定的映射,不幸的是您只能使用编程 API 指定字段级转换器,而不是类级转换器。因此,如果将 A 和 B 类包装在容器类中,则可以为 A 和 B 字段指定一个映射。
例如,以下冗长的代码按预期工作:
public class DozerMap {
public static class ContainerA {
private A a;
public A getA() { return a; }
public void setA(A a) { this.a = a; }
}
public static class ContainerB {
private B b;
public B getB() { return b; }
public void setB(B b) { this.b = b; }
}
private static class A { };
private static class B { };
static class ConverterImpl extends DozerConverter<A, B> {
ConverterImpl() {
super(A.class, B.class);
}
@Override
public B convertTo(A source, B destination) {
Logger.getAnonymousLogger().info("Invoked");
return destination;
}
@Override
public A convertFrom(B source, A destination) {
Logger.getAnonymousLogger().info("Invoked");
return destination;
}
}
public static void main(String[] args) {
DozerBeanMapper mapper = new DozerBeanMapper();
mapper.setCustomConverters(Collections.<CustomConverter> singletonList(new ConverterImpl()));
BeanMappingBuilder foo = new BeanMappingBuilder() {
@Override
protected void configure() {
mapping(ContainerA.class, ContainerB.class).fields("a", "b", FieldsMappingOptions.customConverter(ConverterImpl.class));
}
};
mapper.setMappings(Collections.singletonList(foo));
ContainerA containerA = new ContainerA();
containerA.a = new A();
ContainerB containerB = mapper.map(containerA, ContainerB.class);
}
}
关于java - 推土机 5.3.2。以编程方式设置自定义转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10579368/
我有一个类似于以下两个类的场景: public class Person { private String name; private Set familyMembers; /
如何将单个字段映射到 Dozer 中的 List/Collection? class SrcFoo { private String id; private List bars; }
我正在通过 Dozer 映射器映射两个 DTO 对象。我有兴趣从列表中选择一个值并将其映射到目标文件中的单个字段。 是否可以像这样使用映射: someList[0] someVariab
我正在使用推土机来映射对象。如何忽略(排除)使用推土机注释的字段? 类似于: class A { @IgnoreField public String so
我已经被这个麻烦困扰了两天了,但我无法解决。我有: public class ClientBo{ ... List person; ... } 和 public class ClientV
为什么dozer无法将Number类型的Source Class变量映射到相同类型的Destination Class变量? 出现以下异常: java.lang.IllegalArgumentExce
如何以编程方式为推土机设置自定义转换器?以下代码不起作用: 自定义转换器实现: class ConverterImpl extends DozerConverter { ConverterImpl()
我需要编译一个针对特定架构或更好的程序,使用通用 AMD64 指令编译,忽略更新的 AMD cpu(推土机和打桩机)。 具体来说,我需要绝对忽略任何 FMA 或 XOP 指令(我的理解是这些通常在 O
我想将DTO(均为字符串数据类型)映射到VO(包含String、int、boolean、Date) 学生DTO private StudentDetailDTO student; 学生详细信息DTO:
我有一个列表列表,我正在尝试使用 Dozer 和自定义转换器将其映射到二维数组 [][]。 public class Field { List items; public void a
有没有办法通过它的 xml 映射文件来配置 dozer 以将 -1 的原始 int 字段值转换为空对象引用? 遗留对象模型默认值为 -1,因此零可以是一个有效的选择。 我们要映射到的较新的对象模型假定
我正在尝试在我当前运行 Spring 和 Hibernate 的 Web 应用程序上实现 Dozer 作为桥接模式的帮助,但我认为我做错了什么,因为尝试多次使用 DozerBeanMapper 实例会
我是一名优秀的程序员,十分优秀!