我认为这最终是由于在配置映射器时ModelMapper无法实例化
TimeZone对象(也没有实例化
LocalDateTime)。
实际上,您无需配置任何内容。
ModelMapper mapper = new ModelMapper();Foo foo = new Foo();foo.setTimeZone(TimeZone.getDefault());FooModel model = mapper.map(foo, FooModel.class);System.out.println(model.getTimeZoneId()); // "Europe/Berlin" here
这对我有用。ModelMapper发现您想将
TimeZone‘s属性映射
ID到
FooModel‘s属性
timeZoneId。
不过,以防万一您想手动执行此操作:快速阅读文档后,我发现了converters的概念。使用
Converter将转换
TimeZone为
String可以执行以下操作:
ModelMapper mapper = new ModelMapper();TypeMap<Foo, FooModel> typeMap = mapper.createTypeMap(Foo.class, FooModel.class);Converter<TimeZone, String> tzConverter = ctx -> ctx.getSource().getID() + "!!!";typeMap.addMappings(map -> { map.using(tzConverter).map(Foo::getTimeZone, FooModel::setTimeZoneId);});Foo foo = new Foo();foo.setTimeZone(TimeZone.getDefault());FooModel model = mapper.map(foo, FooModel.class);System.out.println(model.getTimeZoneId()); // "Europe/Berlin!!!" here


