Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接收错误时如何避免显式映射;目标属性的几个可能的源属性“;从mapstruct?_Java_Lombok_Mapstruct - Fatal编程技术网

Java 接收错误时如何避免显式映射;目标属性的几个可能的源属性“;从mapstruct?

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); } 在目标

我有如下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);
}
在目标类中,我有字段状态,但该字段在两个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似乎仍然是用来解决大多数映射问题的。但它不可能理解所有的编程问题。