java - 将一个 bean 中的 firstName、lastName 映射到另一个 bean 中的名称

标签 java dozer

我正在尝试使用 Dozer 在 Java 中映射两个 bean,并有以下场景:

CustomerA 有名字和姓氏

public Class CustomerA {
    public String firstName;
    public String lastName;
    ...
    // Getters and Setters
}

CustomerB 有姓名,需要映射到 firstName+""+lastName

public Class CustomerB {
    public String name;
    ...
    // Getters and Setters
}

是否可以使用 Dozer 来实现此目的?映射文件会是什么样子?我有一个自定义转换器,如下所示:

public class NameConvertor {
    public Object convert(Object destination, Object source, Class destClass, Class sourceClass) {
        Object retValue = null;
        if (source == null) {
            return null;
        }
        if (source instanceof CustomerA) {
            CustomerA src = (CustomerA) source;
            CustomerB dest = (CustomerB) destination;
            if (destination == null) {
                dest = new CustomerB();
            }
            dest.setName(src.getFirstName()+" "+src.getLastName());
            retValue = dest;
        } else if (source instanceof CustomerB) {
            CustomerB src = (CustomerB) source;
            CustomerA dest = (CustomerA) destination;
            if (destination == null) {
                dest = new CustomerA();
            }
            dest.setFirstName(src.getName().split(" ")[0]);
            dest.setLastName(src.getName().split(" ")[1]);
            retValue = dest;
        }
        return retValue;
    }
}

最佳答案

您可以将“this”(A 的实例)传递到自定义转换器中,将两个字段连接在一起并将它们返回以映射到目标。

因此,在您的映射中您将得到如下内容:

<mapping>
  <class-a>path.to.CustomerA</class-a>
  <class-b>path.to.CustomerB</class-b>
  <field custom-converter="NameConverter" type="one-way">
    <a>this</a>
    <b>name</b>
  </field>
</mapping>

然后在你的转换器中你会看到这样的东西:

CustomerA customerA = (CustomerA) source;
StringBuilder builder = new StringBuilder();
builder.append(customerA.getFirstName());
builder.append(customerA.getLastName());
return builder.toString();

我使用一些示例代码进行了测试,它按预期映射。让我知道它是否适合您!

关于java - 将一个 bean 中的 firstName、lastName 映射到另一个 bean 中的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712829/

相关文章:

java - 搜索二维数组越界

java - Dozer - 仅当目标对象和源对象具有相同的字段名称时才映射字段

gradle - 我可以使Gradle依赖项依赖来强制版本吗?

java - BoxLayout 拉伸(stretch)组件以适应父面板

excel - 用于显示 Excel 数据的 Java 库

java - Dozer 将 map 复制到另一个 map

java - 推土机映射内部类

java - Java 中 POJO 的映射器

java - 在方法中使用 java.util.Scanner 会导致运行时错误

Java SSL 客户端身份验证 : How to select alias in Keystore?