Java 仅从DTO映射特定字段->;使用映射结构的模型

Java 仅从DTO映射特定字段->;使用映射结构的模型,java,spring,datamapper,mapstruct,Java,Spring,Datamapper,Mapstruct,我有一个用例,需要映射或填充特定字段的数据 例如:我有一个用户模型,我只需要将它转换为UserDTO 特定字段,如用户名和帐户ID 型号: public class UserCore{ private String accountId; private String username; private String workEmail; private String firstName; private Stri

我有一个用例,需要映射或填充特定字段的数据

例如:我有一个用户模型,我只需要将它转换为UserDTO 特定字段,如用户名和帐户ID

型号:

public class UserCore{

        private String accountId;

        private String username;
        private String workEmail;
        private String firstName;
        private String password;
        private String hashedPassword;

    }
用户地址:

public class UserCoreDTO{

        private String accountId;

        private String username;
        private String workEmail;
        private String firstName;
        private String password;
        private String hashedPassword;

    }
映射结构中是否有任何方法可以只将特定字段从源映射到目标

例如:

UserMapper mapper = Mappers.getMapper( UserMapper.class );
mapper.map(fieldsToFetch,source,destination);

以下是表单的一个示例:


ignore=true
可能适用于所有字段,而不仅仅是示例中的嵌套字段

这里是需要排除的硬编码字段。我的问题不同。我们有什么办法可以做到这一点吗?例如,我正在开发一个API,它将请求参数作为fieldsToFetch=username,salary(即,API响应应该只包含username和salary)。fieldsToFetch是客户端标准。您正在寻找的内容无法工作。Map struct在构建时为映射类生成java代码。您将只知道运行时的字段,您必须查看在运行时使用反射来解决此问题的工具。请注意,mapstruct在构建时这样做的原因并不是为了在运行时产生反射成本。@DarrenForsyth我在mapstruct文档中看到,我没有找到对上述要求的任何支持,这就是为什么我这样做的原因。通常的做法是,每个人都会在不理解问题的情况下说出你们迄今为止尝试过什么。无意伤害
@Mapper
public interface FishTankMapper {

    @Mappings({
        @Mapping(target = "fish.kind", source = "fish.type"),
        @Mapping(target = "fish.name", ignore = true),
        @Mapping(target = "ornament", source = "interior.ornament"),
        @Mapping(target = "material.materialType", source = "material"),
        @Mapping(target = "quality.report.organisation.name", source = "quality.report.organisationName")
    })
    FishTankDto map( FishTank source );
}