Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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 1.4.x-iterable到nonit。示例使用目标点运算符工作_Java_Mapstruct - Fatal编程技术网

Java Mapstruct 1.4.x-iterable到nonit。示例使用目标点运算符工作

Java Mapstruct 1.4.x-iterable到nonit。示例使用目标点运算符工作,java,mapstruct,Java,Mapstruct,我想采用这里的样品 不同的是,使用“myString”运算符而不是某些嵌套属性。给定示例,我希望得到“myString”作为结果,因此字符串将成为新的目标 但是,使用点运算符什么都不会发生。什么都不会发生意味着mapstruct只创建一个新的String实例,而没有iterable到noniterable的映射。这是一种期望的行为吗 如本文所述,示例(取自上述样本): 不打印任何内容,因为生成的代码如下所示: @Generated( value = "org.mapstruc

我想采用这里的样品

不同的是,使用“myString”运算符而不是某些嵌套属性。给定示例,我希望得到“myString”作为结果,因此字符串将成为新的目标

但是,使用点运算符什么都不会发生。什么都不会发生意味着mapstruct只创建一个新的String实例,而没有iterable到noniterable的映射。这是一种期望的行为吗

如本文所述,示例(取自上述样本):

不打印任何内容,因为生成的代码如下所示:

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2021-02-13T15:34:11+0100",
    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 11.0.5 (JetBrains s.r.o)"
)
public class SourceTargetMapperImpl implements SourceTargetMapper {

    @Override
    public String toTarget(Source s) {
        if ( s == null ) {
            return null;
        }

        String string = new String();

        return string;
    }
}
其他类保持原样


另一个例子: 嗨,菲利普,很抱歉迟到了。我想向你展示另一个对我不起作用的用例,或者正如我所期望的那样,使用“qualifiedBy”-阿曲布他。我遗漏了什么

班级地址:

public class Address {

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address(String name) {
        this.name = name;
    }

    private String name;

    @Override
    public String toString() {
        return "Address{" +
                "name='" + name + '\'' +
                '}';
    }
}
使用地址列表对客户进行分类:

public class CustomerManyAddresses {

    public List<Address> getAddresses() {
        return addresses;
    }

    public void setAddresses(List<Address> addresses) {
        this.addresses = addresses;
    }

    private List<Address> addresses;
}
以及测试:

public class CustomerAddressMapperTest {

    private AddressMapper addressMapper = Mappers.getMapper(AddressMapper.class);

    @Test
    public void testCustomerMapper() {

        CustomerManyAddresses customerManyAddresses = new CustomerManyAddresses();
        Address address1 = new Address("first");
        Address address2 = new Address("second");
        Address address3 = new Address("third");
        customerManyAddresses.setAddresses(Arrays.asList(address1, address2, address3));

        Address singleAddress = addressMapper.toSingle(customerManyAddresses);
        System.out.println(singleAddress);
    }
}
…它只打印新生成的地址,这里没有iterable到non iter。再次使用。生成的类:

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2021-02-20T11:05:53+0100",
    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 11.0.5 (JetBrains s.r.o)"
)
public class AddressMapperImpl extends AddressMapper {

    @Override
    Address toSingle(CustomerManyAddresses customerManyAddresses) {
        if ( customerManyAddresses == null ) {
            return null;
        }

        String name = null;

        Address address = new Address( name );

        return address;
    }
}

MapStruct不允许映射到
字符串
。当您使用
target=“.”
时,您的意思是要将第一个元素的属性映射到目标的属性

您可以做的是将目标字符串包装到bean中,然后像那样进行映射


不过,我的建议是,当您只想取回字符串时,编写您自己的自定义方法。

您能在这里提供一个问题示例吗?当然。我刚刚更改了上面提到的示例:将类型返回到字符串,将目标返回到.operator,源仍然是myIntegers。但我稍后会提供它……好的。它可以根据定义不允许?或根据“尚未实施”不允许?;))非常感谢。但是Filip,对于非字符串的对象,也会观察到相同的行为。如果目标是直接对象,则不会映射。将只会有一个新实例。因此,如果您将类型字符串替换为所需的对象类型,您将得到该类型的空对象…,我的意思是使用“.”运算符在默认情况下工作。但是,当使用namedBy时,它不适用。您可以确认或伪造此语句吗?请仔细考虑一下,在使用自定义映射方法时使用“.”运算符并没有真正意义。“”运算符用于告诉MapStruct如何进行映射,当您自己进行映射时,它不会带来太多价值不,我们彼此误解。我将在接下来的几个小时内提供另一个示例。
@Mapper(uses = IterableNonInterableUtil.class)
public abstract class AddressMapper {

    @Mapping(target = ".", source = "addresses", qualifiedBy = FirstElement.class)
    abstract Address toSingle(CustomerManyAddresses customerManyAddresses);
}
public class CustomerAddressMapperTest {

    private AddressMapper addressMapper = Mappers.getMapper(AddressMapper.class);

    @Test
    public void testCustomerMapper() {

        CustomerManyAddresses customerManyAddresses = new CustomerManyAddresses();
        Address address1 = new Address("first");
        Address address2 = new Address("second");
        Address address3 = new Address("third");
        customerManyAddresses.setAddresses(Arrays.asList(address1, address2, address3));

        Address singleAddress = addressMapper.toSingle(customerManyAddresses);
        System.out.println(singleAddress);
    }
}
@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2021-02-20T11:05:53+0100",
    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 11.0.5 (JetBrains s.r.o)"
)
public class AddressMapperImpl extends AddressMapper {

    @Override
    Address toSingle(CustomerManyAddresses customerManyAddresses) {
        if ( customerManyAddresses == null ) {
            return null;
        }

        String name = null;

        Address address = new Address( name );

        return address;
    }
}