datus lets you define data conversion with an easy to use fluent builder system for handling additional processing or edge cases. No more boiler-platey factory classes for mutable:
class Person {
//getters + setters omitted for brevity
private String firstName;
private String lastName;
}
class PersonDTO {
//getters + setters + empty constructor omitted for brevity
private String firstName;
private String lastName;
}
//the mutable API defines a mapping process by multiple getter-setter steps
Mapper<Person, PersonDTO> mapper = Datus.forTypes(Person.class, PersonDTO.class)
.mutable(PersonDTO::new)
.from(Person::getFirstName).into(PersonDTO.setFirstName)
.from(Person::getLastName)
.given(Objects::nonNull, ln -> ln.toUpperCase()).orElse("fallback")
.into(PersonDTO::setLastName)
.from(/*...*/).into(/*...*/)
.build();
and immutable types:
class Person {
//getters + constructor omitted for brevity
private final String firstName;
private final String lastName;
}
class PersonDTO {
//getters omitted for brevity
private final String firstName;
private final String lastName;
public PersonDTO(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
//define a building process for each constructor parameter, step by step
//the immutable API defines constructor parameters in their declaration order
Mapper<Person, PersonDTO> mapper = Datus.forTypes(Person.class, PersonDTO.class)
.immutable(PersonDTO::new)
.from(Person::getFirstName).to(ConstructorParameter::bind)
.from(Person::getLastName)
.given(Objects::nonNull, ln -> ln.toUpperCase()).orElse("fallback")
.to(ConstructorParameter::bind)
.build();
Easy to integrate with Spring etc. - read the full usage guide in less than 20 minutes.
Top comments (0)