There are two simple interfaces, Converter and ListConverter,
used to copy to and from two different types classes.
This provides a clear interface for the application to interact with
even though Dozer is the primary implementation,
it provides some flexibility for other possible implementations.
Such as converting a JSON String to and from a class.
Example 1. Converter
Simple interface for converting to and from any two classes.
public interface Converter<T, V> {
/**
* Converts from a domain model to the business model.
*/
public V convertTo(T source);
/**
* Converts from a business model to the domain model.
*/
public T convertFrom(V source);
}
Example 2. ListConverter
Simple interface for converting to and from lists of any two classes.
public interface ListConverter<T, V> extends Converter<T, V> {
/**
* Converts from a domain model list to a business model list.
*/
public List<V> convertListTo(Collection<T> list);
/**
* Converts from a business model list to a domain model list.
*/
public List<T> convertListFrom(Collection<V> list);
}
Example 3. AbstractMapperListConverter
Most converter implementations should just need to extend this class and pass in the appropriate parameters to the constructor.
public abstract class AbstractMapperListConverter<T, V> extends AbstractListConverter<T, V> {
private final Mapper mapper;
private final Class<T> tClazz;
private final Class<V> vClazz;
public AbstractMapperListConverter(Mapper mapper,
Class<T> tClazz, Class<V> vClazz) {
this.mapper = mapper;
this.tClazz = tClazz;
this.vClazz = vClazz;
}
@Override
public V convertTo(T source) {
Assert.notNull(source, "Source must not be null.");
return mapper.map(source, vClazz);
}
@Override
public T convertFrom(V source) {
Assert.notNull(source, "Source must not be null.");
return mapper.map(source, tClazz);
}
}
Example 4. ContactConverter
The ContactConverter converts to and from the
entity and JAXB bean. It extends AbstractMapperListConverter,
which basically just delegates to Dozer.
@Component
public class ContactConverter extends AbstractMapperListConverter<org.springbyexample.contact.orm.entity.person.Person, Person> {
@Autowired
public ContactConverter(Mapper mapper) {
super(mapper,
org.springbyexample.contact.orm.entity.person.Person.class, Person.class);
}
}