Dto与Model之间的转换

来源:互联网 发布:调度数据网一二平面 编辑:程序博客网 时间:2024/06/05 19:18

2017-03-17

看到这篇文章,访问量挺高,但营养不多,对于急于需要解决问题的人来说,简直浪费时间。所以,今天特意整理一下转换



1我使用的是  ModelMapper,其他转换类也有和很多,不要局限于使用这个。

<!--modelmapper--><dependency>    <groupId>org.modelmapper</groupId>    <artifactId>modelmapper</artifactId>    <version>0.7.5</version></dependency>
2配置转换类 ClazzA 到 ClazzB
import org.modelmapper.ModelMapper;import org.modelmapper.convention.MatchingStrategies;public class Config {    private static ModelMapper maper = null;    public static ModelMapper getMapper() {        if (maper == null) {            maper = new ModelMapper();            maper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);                             PropertyMap<ClazzA, ClazzB> clazzBPropertyMap = new PropertyMap<ClazzA, ClazzB>() {                @Override                protected void configure() {                }            };            maper.addMappings(clazzBPropertyMap);                        maper.validate();        }        return maper;    }}

3具体位置直接调用
Config.getMapper().map(classA, ClazzB.class);
4扩展转换类
比如classA中是 type枚举,而classB中 type是short类型
增加转换器
public static Converter<Enum, Short> autoConverterToShort(ModelMapper modelMapper) {        final Converter<Enum, Short> enumToShort = new AbstractConverter<Enum, Short>() {            @Override            protected Short convert(Enum source) {                Short value = 0;                try {                    if (null != source) {                        value = Short.valueOf(source.getClass().getDeclaredMethod("value").invoke(source).toString());                    }                } catch (Exception e) {                    log.error("MapperEnumConverter To Short Error");                    e.printStackTrace();                }                return value;            }        };        modelMapper.addConverter(enumToShort);        return enumToShort;    }
在转换类中声明这个转换器
 final Converter<Enum, Short> enumToShort = MapperEnumConverter.autoConverterToShort(maper);
具体的类中,调用这个转换器
PropertyMap<ClazzA, ClazzB> clazzBPropertyMap = new PropertyMap<ClazzA, ClazzB>() {                @Override                protected void configure() {                    using(enumToShort).map(source.getType()).setType(null);                }            };            maper.addMappings(clazzBPropertyMap);
扩展转换器也可以 list 转String ,枚举换Short,自由发挥。






1 1