Deep dispenser display with annotations

Unable to map deep mapping from source class to target class SourceEmployee.Address.houseName to TargetEmployee.houseName

Source Object Class

 public class SourceEmployee { private String empName; private Address addr; enter code here @Mapping("empName") public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public Address getAddr() { return addr; } public void setAddr(Address addr) { this.addr = addr; } } 

Class address

 public class Address { private String houseName; public String getHouseName() { return houseName; } public void setHouseName(String houseName) { this.houseName = houseName; } } 

target object

 public class TargetEmployee { private String empName; private String houseName; public String getHouseName() { return houseName; } public void setHouseName(String houseName) { this.houseName = houseName; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } } 

Copy main class from source to destination

 public class CopyAttributes { public static void main(String args[]) { SourceEmployee sourceEmp = new SourceEmployee(); sourceEmp.setEmpName("Rafi"); Address adr = new Address(); adr.setHouseName("Aashiyana"); sourceEmp.setAddr(adr); Mapper mapper = new DozerBeanMapper(); TargetEmployee destObject = mapper.map(sourceEmp, TargetEmployee.class); System.out.println(destObject.getEmpName()); System.out.println(destObject.getHouseName()); } } 
+4
source share
2 answers

If someone else is facing the same problem, I manage to fix this case by doing the following:

 public class TargetEmployee { private String empName; private String houseName; @Mapping("addr.houseName") public String getHouseName() { return houseName; } public void setHouseName(String houseName) { this.houseName = houseName; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } } 

 @Mapping("empName") 

set to SourceEmployee Not required

+2
source

just add this annotation to the source class (SourceEmployee):

 @Mapping("this") private Address addr; 

In fact, "this" means "stay on the same node"; after that, houseName will match between Address and TargetEmployee.

;)

Alex

+1
source

Source: https://habr.com/ru/post/1384377/


All Articles