Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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_Mapstruct - Fatal编程技术网

Java 使用MapStruct映射嵌套字段

Java 使用MapStruct映射嵌套字段,java,mapstruct,Java,Mapstruct,假设我有这些实体: public class Address { private String id; private String address; private City city; } public class City { private int id; private Department department; private String zipCode; private String name; private

假设我有这些实体:

public class Address {
    private String id;
    private String address;
    private City city;
}

public class City {
    private int id;
    private Department department;
    private String zipCode;
    private String name;
    private Double lat;
    private Double lng;
}

public class Department {
    private int id;
    private Region region;
    private String code;
    private String name;
}

public class Region {
    private int id;
    private String code;
    private String name;
}
此DTO:

public class AddressDTO {
    private String address;
    private String department;
    private String region;
    private String zipCode;
}
在我的DTO中,我想映射

  • 来自城市/部门/姓名的部门
  • 来自城市/部门/地区/名称的地区
这是我的地图:

@Mapper(componentModel = "spring")
public interface AddressMapper {
    AddressDTO addressToAddressDTO(Address item);
}

映射嵌套字段时,您需要告诉MapStruct要从何处以及如何使用
@mapping
进行映射

在您的情况下,它将如下所示:

@Mapper(componentModel = "spring")
public interface AddressMapper {
    
    @Mapping(target = "department", source = "city.department.name")
    @Mapping(target = "region", source = "city.department.region.name")
    @Mapping(target = "zipCode", source = "city.zipCode")
    AddressDTO addressToAddressDTO(Address item);
}

映射嵌套字段时,您需要告诉MapStruct要从何处以及如何使用
@mapping
进行映射

在您的情况下,它将如下所示:

@Mapper(componentModel = "spring")
public interface AddressMapper {
    
    @Mapping(target = "department", source = "city.department.name")
    @Mapping(target = "region", source = "city.department.region.name")
    @Mapping(target = "zipCode", source = "city.zipCode")
    AddressDTO addressToAddressDTO(Address item);
}