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); } }