I can recommend using the mapstruct library:
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.Final</version> </dependency>
For example, if you have an entity like this:
public class Entity { private Integer status; private String someString; private Date startDate; private Date endDate;
And DTO:
public class Dto { private Boolean status; private String someString; private Long startDate; private Long endDate;
Then the conversion can be performed at the service level as follows:
@Service public class SomeServiceImpl implements SomeService { @Autowired SomeDao someDao; @Autowired SomeMapper someMapper; public Dto getSomething(SomeRequest request) throws SomeException { return someDao.getSomething(request.getSomeData()) .map(SomeMapper::mapEntityToDto) .orElseThrow(() -> new SomeException("...")); }
A cartographer can be represented as follows:
@Mapper public interface SomeMapper { @Mappings( {@Mapping(target = "entity", expression = "java(entity.getStatus() == 1 ? Boolean.TRUE : Boolean.FALSE)"), @Mapping(target = "endDate", source = "endDate"), @Mapping(target = "startDate", source = "startDate") }) Dto mapEntityToDto(Entity entity); }
source share