我有以下映射器接口:
@Mapper(componentModel = "spring", uses = {
MapperClassA.class
})
public interface SourceTargetMapper {
@Mapping(target = "allowed", constant = "Boolean.FALSE")
Target toTarget(final Source );
}
MapperClassA具有以下方法:
public static boolean isAllowed(final String id) {
// implementation
}
public static boolean isSafe(final String id) {
// implementation
}
当我运行干净安装时,我收到以下错误:
SourceTargetMapper.java:找到用于将常量'“Boolean.FALSE”'映射到java.lang.Boolean的不明确的映射方法:boolean MapperClassA.isAllowed(java.lang.String id),boolean MapperClassA.isSafe(java.lang.String id) 。
如果我将@Named添加到两个方法,那么代码编译就好了。但是,我不明白为什么它甚至会在MapperClassA中查找这些方法。根据MapStruct文档:
当目标类型是基元类型或盒装类型时,String值是文字的。 ...在所有其他情况下,常量或默认值可通过内置转换或其他映射方法的调用进行类型转换,以匹配目标属性所需的类型。
在这种情况下,'allowed'是Target类中的布尔属性。那么它应该只取String值吗?而不是尝试在映射器中调用方法。
有谁可以解释为什么它不只是使用'Boolean.FALSE'?
尝试
@Mapper(componentModel = "spring" )
public interface SourceTargetMapper {
@Mapping(target = "allowed", constant = "false")
Target toTarget(final Source );
}
所以没有你的映射方法。
问题