java - 如何禁用 MapStruct 中源映射中的字段?

标签 java mapstruct

例如,我有一个带有字段的映射类,该字段未在映射类中呈现。

我想要映射的:

@Entity
@Table(name = "t_connection")
@Getter @Setter
@EqualsAndHashCode
public class ConnectionEntity {
    @NotNull
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    protected UUID id;
...
}

一个类,其中我想要映射:

@ApiModel
@Getter
@Setter
@NoArgsConstructor
public class ConnectionDto {
    @ApiModelProperty
    private LocalDateTime createAt;
...
// Other fields without id field
}

我的映射器如下所示:

@Mapper(componentModel = "spring",
        unmappedTargetPolicy = ReportingPolicy.ERROR,
        unmappedSourcePolicy = ReportingPolicy.ERROR)
public interface CallMapper {

    @IterableMapping(qualifiedByName = "map")
    List<ConnectionDto> map(List<ConnectionEntity> connectionEntities);

    ConnectionDto map(ConnectionEntity connectionEntity);
}

我想知道,当特定字段未映射时,因此禁用 unmappedSourcePolicy 不是一个选项。有什么建议吗?

最佳答案

如果我理解你的话..你想控制不想映射的源属性?

在这种情况下尝试:

@BeanMapping#ignoreUnmappedSourceProperties

所以:

@Mapper(componentModel = "spring",
        unmappedTargetPolicy = ReportingPolicy.ERROR,
        unmappedSourcePolicy = ReportingPolicy.ERROR)
public interface CallMapper {

    @IterableMapping(qualifiedByName = "map")
    List<ConnectionDto> map(List<ConnectionEntity> connectionEntities);

    @BeanMapping( ignoreUnmappedSourceProperties={"id"} )
    ConnectionDto map(ConnectionEntity connectionEntity);
}

您不需要指定列表映射,除非您从外部需要此列表。MapStruct 将为您生成一个列表映射。如果您确实需要从外部列表,则可能不需要限定符。 .泛型+列表就够了

关于java - 如何禁用 MapStruct 中源映射中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54863315/

相关文章:

java - 封装别名字段的 JPQL 函数

eclipse - 如何成功集成 Gradle、MapStruct 1.3.1 和 Eclipse 2020-03?

java - 带有抽象和通配符的 Mapstruct

java mapstruct - 映射相关集合中的字段

java - 是否可以在 jdom 中搜索属性?

Java数组问题

java - build 象鸟时出错

java - 在 Java 中连接到 MySQL 数据库

java - 源参数中不存在名为 "Id"的属性。您的意思是 "null"吗?

java - 在 mapstruct 中使用构建器(使用不可变注释处理器)将对象映射到不可变对象(immutable对象)