3

将 Java 版本升级到 openJDK 11 后,modelMapper 配置未加载,出现 NullPointerException。

NullPointerException issue is not resolved even after upgrading modelMapper version to 2.3.2

错误日志:

1) 配置映射失败

堆栈跟踪:

at org.modelmapper.internal.Errors.throwConfigurationExceptionIfErrorsExist(Errors.java:241)
    at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:244)
    at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:96)
    at org.modelmapper.internal.TypeMapImpl.addMappings(TypeMapImpl.java:92)
    at org.modelmapper.internal.TypeMapStore.getOrCreate(TypeMapStore.java:124)
    at org.modelmapper.ModelMapper.addMappings(ModelMapper.java:113)
    ...
Caused by: java.lang.NullPointerException
    at org.modelmapper.internal.ExplicitMappingBuilder$ExplicitMappingInterceptor.access$000(ExplicitMappingBuilder.java:304)
    at org.modelmapper.internal.ExplicitMappingBuilder.createAccessorProxies(ExplicitMappingBuilder.java:287)
    at org.modelmapper.internal.ExplicitMappingBuilder.createProxies(ExplicitMappingBuilder.java:277)
    at org.modelmapper.internal.ExplicitMappingBuilder.visitPropertyMap(ExplicitMappingBuilder.java:266)
    at org.modelmapper.PropertyMap.configure(PropertyMap.java:386)
    at jdk.internal.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:227)
    ... 6 more
4

2 回答 2

1

我对 modelmapper 2.3.0 有同样的问题。更新到最新的 2.3.9 并解决了问题

于 2020-12-01T22:14:10.107 回答
1

在内部 ByteBuddy 引发了一个导致该问题的异常,我将对其进行更多研究,看看是否可能是 ModelMapper 中的错误。

无论如何,请查看http://modelmapper.org/user-manual/property-mapping/上的 Java 8 选项卡,您当前的代码似乎正在使用旧文档。

ModelMapper mm = new ModelMapper();

TypeMap<A, B> typeMap = mm.createTypeMap(A.class, B.class);
typeMap.addMappings(mapper -> {
    mapper.map(A::getDate, B::setTest);
    ... // Other mappings
});

这可以转换Date -> Long开箱即用,无需任何其他配置。如果您希望进一步配置它,您可以随时创建自定义转换器,如下所示:

Converter<Date, Long> dateToLong = new AbstractConverter<Date, Long>() {
    @Override
    protected Long convert(Date source) {
        System.out.println("converting: " + source + " to " + source.getTime());
        return source.getTime();
    }
};

typeMap.addMappings(mapper -> mapper.using(dateToLong).map(A::getDate, B::setTest));
于 2019-07-01T14:31:37.507 回答