当前位置: 首页 > 知识库问答 >
问题:

当对象A包含对对象B的引用时,是否可以用Mapstruct将对象B的属性映射到对象A_DTO的属性?

卞坚成
2023-03-14

根据Mapstruct文档,通过为被引用的对象(对象B)定义映射方法,可以将一个对象(对象A)映射到D,该对象包含另一个对象(对象B)。但是如果我只需要映射那个对象(对象B)的属性而不是整个对象呢?

    fun AppUserEntity.toAppUserDetailsDTO() = AppUserDetailsDTO(
            id = id,
            username = appUserLogin,
            password = appUserPassword,
            authorities = roles.map { it.name },
            isEnabled               = isEnabled,
            isAccountNonLocked      = isAccountNonLocked,
            isAccountNonExpired     = isAccountNonExpired,
            isCredentialsNonExpired = isCredentialsNonExpired
    )

但是如何用Java和MapStruct来实现呢?

共有1个答案

狄赞
2023-03-14

在Mapstruct上,可以使用注释的expression属性将一个方法用于注释的映射:expression=“java(yourJavaCodeHere)”

您的映射器将如下所示:

@Mapper(componentModel = "spring")
public abstract class AppUserDetailsDtoMapper {

    @Mappings({
            @Mapping(target = "username", source = "appUserLogin"),
            @Mapping(target = "password", source = "appUserPassword"),
            @Mapping(target = "authorities", expression = "java( mapAuthorities(user.getRoles()) )")
    })
    public abstract AppUserDetailsDTO toAppUserDetailsDTO(AppUserEntity user);

    protected Collection<GrantedAuthority> mapAuthorities(Set<RoleEntity> roles) {
        // Map the authorities here
    }
}
 类似资料:
  • 映射器类如下所示:

  • 如何处理对象的javascript数组,例如: 并通过求和这些值合并重复的键。为了得到这样的东西: 我尝试过迭代并添加到一个新数组中,但这没有起到作用:

  • 我正在使用一个映射,并希望使用一个值对象作为映射键。。和一个列表作为值。值对象有两个属性:第一个名称、第二个名称。。我想把地图还给你。如果两个属性都与同一映射中的某个键匹配,则containsKey()为true。。 我尝试使用比较器如下 这是我正在使用的值对象 但它为我返回假...请帮助我...谢谢提前

  • 假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?

  • 当遍历ACROD时,有一个列表,并希望将该列表中的第一个对象映射到我的域对象。 @mapping(source=“insurancesvcrqs[0].policyquoteinqrqsaddrqsandpolicyquoteinqrqs[0].productues[0].generalpartyinfo.nameinfos[0].commlname.commericalname”,target=

  • 我使用Mapstruct(1.2.0.final)来映射dto对象,我希望将对象的属性提取到它自己的对象实例。 如何做到这一点?或者有没有更方便的方法来去掉只有一个属性的(无用的)对象? 提前谢了。