Here is an example of the flattening of a complex object model to a simple model and the opposite using ModelMapper (Java).
Consider the following classes:
PersonDTO – the flatten class
package model_mapper_test.modelmapper;
public class PersonDTO {
private boolean a;
private boolean b;
private boolean c;
public boolean isA() {
return a;
}
public void setA(boolean a) {
this.a = a;
}
public boolean isB() {
return b;
}
public void setB(boolean b) {
this.b = b;
}
public boolean isC() {
return c;
}
public void setC(boolean c) {
this.c = c;
}
@Override
public String toString() {
return "PersonDTO [a=" + a + ", b=" + b + ", c=" + c + "]";
}
Person and Consensus – the complex classes
package model_mapper_test.modelmapper;
public class Person {
private Consensus consensus;
public Consensus getConsensus() {
return consensus;
}
public void setConsensus(Consensus consensus) {
this.consensus = consensus;
}
@Override
public String toString() {
return "Person [consensus=" + consensus + "]";
}
}
package model_mapper_test.modelmapper;
public class Consensus {
private boolean a;
private boolean b;
private boolean c;
public boolean isA() {
return a;
}
public void setA(boolean a) {
this.a = a;
}
public boolean isB() {
return b;
}
public void setB(boolean b) {
this.b = b;
}
public boolean isC() {
return c;
}
public void setC(boolean c) {
this.c = c;
}
@Override
public String toString() {
return "Consensus [a=" + a + ", b=" + b + ", c=" + c + "]";
}
}
In order to map from PersonDTO to Person and from Person to PersonDTO we should proceed in this way:
package andreidodu.modelmapper;
import org.modelmapper.ModelMapper;
public class App {
public static void main(String[] args) {
ModelMapper modelMapper = new ModelMapper();
modelMapper.typeMap(Person.class, PersonDTO.class).addMappings(mapper -> {
mapper.<Boolean> map(src -> src.getConsensus().isA(), PersonDTO::setA);
mapper.<Boolean> map(src -> src.getConsensus().isB(), PersonDTO::setB);
mapper.<Boolean> map(src -> src.getConsensus().isC(), PersonDTO::setC);
});
modelMapper.typeMap(PersonDTO.class, Person.class).addMappings(mapper -> {
mapper.<Boolean> map(src -> src.isA(), (db, value) -> db.getConsensus().setA(value));
mapper.<Boolean> map(src -> src.isB(), (db, value) -> db.getConsensus().setB(value));
mapper.<Boolean> map(src -> src.isC(), (db, value) -> db.getConsensus().setC(value));
});
modelMapper.validate();
Person db = new Person();
Consensus consensus = new Consensus();
consensus.setA(true);
consensus.setB(false);
consensus.setC(true);
db.setConsensus(consensus);
System.out.println(modelMapper.map(db, PersonDTO.class));
PersonDTO dto = new PersonDTO();
dto.setA(true);
dto.setB(false);
dto.setC(true);
System.out.println(modelMapper.map(dto, Person.class));
}
}
You can find this example on GitHub.

An eastern european proverb says that in order to give a deeper meaning to one’s life, in the course of our life it is necessary to build a house, give birth to a child and plant a tree.
Feel free to contact me contact me.