【发布时间】:2020-08-12 08:37:47
【问题描述】:
根据 Mapstruct 文档,可以通过为引用的对象(对象 B)定义映射方法将包含另一个对象(对象 B)的对象(对象 A)映射到 DTO。但是如果我只需要映射该对象(对象 B)的属性而不是整个对象呢?
描述问题 - 我正在研究 Spring Boot,这是我的项目 - https://github.com/Alex1182-St/java-spring-jpa-postgresql
出于安全考虑,我需要将我的 AppUserEntity 映射到 AppUserDetailsDTO(实现 UserDetails),尤其是我需要将 name 从将我的 AppUserEntity 的 private Set<RoleEntity> roles 属性添加到我的 AppUserDetailsDTO
private Collection<GrantedAuthority> authorities
使用 Kotlin 很容易(authorities = roles.map { it.name }):
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 做到这一点?
【问题讨论】:
-
虽然您显然不能在 Java 中使用扩展功能,但您可以通过一些实用方法来实现。 Java 的 Stream-API 允许将对象 A 映射到另一个对象 B……在我看来,这应该很容易。关于 MapStruct: 没用过,所以不能说太多。对不起。
标签: java spring-boot mapstruct