Java 接收错误时如何避免显式映射;目标属性的几个可能的源属性“;从mapstruct?
我有如下mapstruct Mapper的实现Java 接收错误时如何避免显式映射;目标属性的几个可能的源属性“;从mapstruct?,java,lombok,mapstruct,Java,Lombok,Mapstruct,我有如下mapstruct Mapper的实现 @Mapper public interface MyMapper extends Serializable { MyMapper INSTANCE = Mappers.getMapper(MyMapper.class); //@Mapping(target = "status", source = "p1.status") MergedPojosClass from(Pojo1 p1, Pojo2 p2); } 在目标
@Mapper
public interface MyMapper extends Serializable {
MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);
//@Mapping(target = "status", source = "p1.status")
MergedPojosClass from(Pojo1 p1, Pojo2 p2);
}
在目标类中,我有字段状态,但该字段在两个pojo类中都可用。
对于我的POJO,我使用lombok生成setter、getter和所有类型的构造函数
没有注释行,我收到以下错误:
错误:(20,14)java:目标属性“status”有几个可能的源属性
我可以通过添加一些注释说明Pojo1具有更高的优先级来避免上述样板文件(显式映射)吗?
我研究了Java文档和mapstruct的源代码,但没有任何示例或线索对我的案例有所帮助。我试图用InheritationSequenceAtegy找到一些东西,但它看起来很像mapstruct的内部概念。您可以尝试定义一个
@MapperConfig
。但不确定它是否有效
所以像这样:
@Mapper(nullValuePropertyMappingStrategy = IGNORE)
public interface PojoMerger {
void copyNonNullProperties(@MappingTarget Pojo target, Pojo source);
default Pojo merge(Pojo... sources) {
Pojo merged = new Pojo();
for(Pojo source: sources) {
copyNonNullProperties(merged, source);
}
return merged;
}
}
@MapperConfig
公共接口MyConfig{
@映射(target=“status”,source=“p1.status”)
来自的MergedPojosClass(Pojo1 p1);
}
@映射器(config=MyConfig.class,mappingInheritationSequestrategy=mappingInheritationSequestrategy.AUTO_inheritage_ALL_FROM_config)
公共接口MyMapper扩展了可序列化{
MyMapper实例=Mappers.getMapper(MyMapper.class);
//这里有个疑问..我不确定在2 arg映射中是否使用了配置
来自(Pojo1 p1,Pojo2 p2)的MergedPojosClass;
}
您可以尝试定义@MapperConfig
。但不确定它是否有效
所以像这样:
@Mapper(nullValuePropertyMappingStrategy = IGNORE)
public interface PojoMerger {
void copyNonNullProperties(@MappingTarget Pojo target, Pojo source);
default Pojo merge(Pojo... sources) {
Pojo merged = new Pojo();
for(Pojo source: sources) {
copyNonNullProperties(merged, source);
}
return merged;
}
}
@MapperConfig
公共接口MyConfig{
@映射(target=“status”,source=“p1.status”)
来自的MergedPojosClass(Pojo1 p1);
}
@映射器(config=MyConfig.class,mappingInheritationSequestrategy=mappingInheritationSequestrategy.AUTO_inheritage_ALL_FROM_config)
公共接口MyMapper扩展了可序列化{
MyMapper实例=Mappers.getMapper(MyMapper.class);
//这里有个疑问..我不确定在2 arg映射中是否使用了配置
来自(Pojo1 p1,Pojo2 p2)的MergedPojosClass;
}
如果要将同一类型的多个对象合并为一个对象,可以使用@MappingTarget
。但是,这种方法会修改参数。如果要生成一个新对象,您需要以下内容:
@Mapper(nullValuePropertyMappingStrategy = IGNORE)
public interface PojoMerger {
void copyNonNullProperties(@MappingTarget Pojo target, Pojo source);
default Pojo merge(Pojo... sources) {
Pojo merged = new Pojo();
for(Pojo source: sources) {
copyNonNullProperties(merged, source);
}
return merged;
}
}
如果要将同一类型的多个对象合并为一个对象,可以使用
@MappingTarget
。但是,这种方法会修改参数。如果要生成一个新对象,您需要以下内容:
@Mapper(nullValuePropertyMappingStrategy = IGNORE)
public interface PojoMerger {
void copyNonNullProperties(@MappingTarget Pojo target, Pojo source);
default Pojo merge(Pojo... sources) {
Pojo merged = new Pojo();
for(Pojo source: sources) {
copyNonNullProperties(merged, source);
}
return merged;
}
}
我有两个不同的源代码类Pojo1和Pojo2,它们被合并到第三个类MergedPojosClasss中。我有两个不同的源代码类Pojo1和Pojo2,它们被合并到第三个类MergedPojosClasss中。对我来说,显式mappingMapStruct似乎仍然旨在解决大多数映射问题。但它不可能理解您所有的编程问题。对我来说,显式mappingMapStruct似乎仍然是用来解决大多数映射问题的。但它不可能理解所有的编程问题。