java Mapstruct报告策略不适用于嵌套属性
我在项目中使用mapstruct进行模型映射。为了确保在映射程序中处理每个目标属性,我使用unappedTargetPolicy=Error
我的问题是,我的模型中有嵌套类,我需要确保嵌套类的每个属性也被映射
我发现了以下几件事:
- 如果我没有映射任何嵌套类(没有属性,也没有嵌套类本身),我会得到预期的编译错误-->;嗯
- 如果我为嵌套类定义了显式映射,则会得到嵌套类的每个未映射属性的预期编译错误-->;嗯
- 但是,如果在基类的映射定义中映射嵌套类的至少一个属性,则不会得到错误-->;不适合我(例如@Mapping(source=“abc”,target=“memberOfNestedClassType.abc”)
我如何确保在映射中,即使不对嵌套类使用显式映射器,也能处理每个目标属性
或者这可能是mapstruct中的一个bug
谢谢你的帮助
CodeExample(对于案例3.NestedMember.b未映射):
// Target Class
package test;
public class Target {
public String x;
public String y;
public NestedClass nestedMember;
public static class NestedClass {
public String a;
public String b;
}
}
// Source class
package test;
public class Input {
public String source;
}
// Mapping
package test;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
@Mapper(unmappedSourcePolicy = ReportingPolicy.WARN, unmappedTargetPolicy = ReportingPolicy.ERROR)
public interface MyMapper {
@Mapping(target = "x", constant = " ")
@Mapping(target = "y", constant = " ")
@Mapping(target = "nestedMember.a", source = "source")
Target map(Input input);
}
//生成的Impl
package test;
import javax.annotation.Generated;
import test.Target.NestedClass;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-05-18T09:22:27+0200",
comments = "version: 1.4.2.Final, compiler: Eclipse JDT (IDE) 1.3.1200.v20200916-0645, environment: Java 11.0.10 (AdoptOpenJDK)"
)
public class MyMapperImpl implements MyMapper {
@Override
public Target map(Input input) {
if ( input == null ) {
return null;
}
Target target = new Target();
target.nestedMember = inputToNestedClass( input );
target.x = " ";
target.y = " ";
return target;
}
protected NestedClass inputToNestedClass(Input input) {
if ( input == null ) {
return null;
}
NestedClass nestedClass = new NestedClass();
nestedClass.a = input.source;
return nestedClass;
}
}
共 (0) 个答案