In this first example, we try to demonstrate mapping some mismatched fields
public class Person {
private Name name;
private List<Name> knownAliases;
private Date birthDate;
public Person(Name name, Date birthDate,
List<Name> knownAliases) {
this.name = name;
this.birthDate = birthDate.clone();
this.knownAliases = new ArrayList<Name>(knownAliases);
}
public List<Name> getKnownAliases() {
return Collections.unmodifiableList(knownAliases);
}
public Name getName() {
return name;
}
public Date getBirthDate() {
return birthDate.clone();
}
}
public class Name {
private String first;
private String last;
public Name(String first, String last) {
this.first = first;
this.last = last;
}
public String getFirst() {
return first;
}
public String getLast() {
return last;
}
}
public class PersonDto {
private String firstName;
private String lastName;
private Date birthDate;
private String[][] aliases;
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public Date getBirthDate() {
return birthDate;
}
public String[][] getAliases() {
return aliases;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public void setAliases(String[][] aliases) {
this.aliases = aliases;
}
}
Let’s assume that we’d like to map Person to PersonDto (and vice-versa); there are a few interesting points about these two classes. First, Person has a ‘name’ property which is of type Name, while PersonDto contains the name data in two string fields ‘firstName’ and ‘lastName’.
Also, the ‘knownAliases’ property of Person is actually stored in a multi-dimensional array in PersonDto, with the first name in index 0 of the second dimension, and the last name in index 1 of the second dimension.
Below, we’ll demonstrate how to configure Orika to map these classes; we’ll use our own custom extension of ConfigurableMapper, like so:
public class Mapper extends ConfigurableMapper {
protected void configure(MapperFactory factory) {
factory.classMap(Person.class, PersonDto.class)
.field("name.first", "firstName")
.field("name.last", "lastName")
.field("knownAliases{first}", "aliases{[0]}")
.field("knownAliases{last}", "aliases{[1]}")
.byDefault()
.register();
}
}