在我的SpringBoot应用程序中,我有两个实体User
和Role
public class User {
private Long id;
private String email;
private String password;
private Set<Role> roles;
[...]
}
public class Role {
private Long id;
private String name;
private Set<User> users;
[...]
}
我的DTO看起来非常相似,直到我意识到这可能会导致递归问题,当一个用户
有一个字段角色
,它有一个相同用户
的字段,它有一个相同角色
的字段,等等。
因此,我决定只把id
s交给我的DTO,所以它们看起来像这样
public class UserDto {
private Long id;
private String email;
private String password;
private List<Long> roleIds;
}
public class RoleDto {
private Long id;
private String name;
private List<Long> userIds;
}
我的制图器很简单,以前是这样的
import org.mapstruct.Mapper;
@Mapper
public interface UserMapper {
User userDtoToUser(UserDto userDto);
UserDto userToUserDto(User user);
List<UserDto> userListToUserDtoList(List<User> users);
}
import org.mapstruct.Mapper;
@Mapper
public interface RoleMapper {
Role roleDtoToRole(RoleDto roleDto);
RoleDto roleToRoleDto(Role Role);
List<RoleDto> roleListToRoleDtoList(List<Role> roles);
}
我将如何更改它们,以便他们将用户
转换为/从userIds
和角色
转换为/从角色Ids
?
从角色
到rolesDtos
或用户
到usersDtos
的单向映射非常简单
@Mapper
public interface RoleMapper {
List<RoleDto> roleListToRoleDtoList(List<Role> role);
@Mapping(target = "userIds", source = "users", qualifiedByName = "userListToUserDtoList")
RoleDto roleToRoleDto(Role role);
@Named("userListToUserDtoList")
default List<Long> userListToUserDtoList(Set<User> users) {
return users.stream().map(User::getId).collect(Collectors.toList());
}
}
@Mapper
public interface UserMapper {
List<UserDto> userListToUserDtoList(List<User> users);
@Mapping(target = "roleIds", source = "roles", qualifiedByName = "roleListToRoleDtoList")
UserDto userToUserDto(User user);
@Named("roleListToRoleDtoList")
default List<Long> roleListToRoleDtoList(Set<Role> roles) {
return roles.stream().map(Role::getId).collect(Collectors.toList());
}
}
真正的问题是地图
User userDtoToUser(UserDto userDto);
或
Role roleDtoToRole(RoleDto roleDto);
因为这里MapSTRt不知道如何将userIds
转换为user
,所以您需要一些机制来获取每个userId并将其解析为整个对象。如果您使用Spring,您可以将映射器设为Spring bean-https://mapstruct.org/documentation/stable/reference/html/#using-dependency-injection或装饰器https://mapstruct.org/documentation/stable/reference/html/#decorators-with-spring注入适当存储库的“获取方法”。
,但在这里我将考虑是否值得挖掘或在方向映射中为您的递归
案例实现一些专用方法。
我已经阅读了文档和示例,但我很难将其全部整理在一起。我只是尝试获取一个测试pdf文件,然后将其转换为字节数组,然后获取字节数组并将其转换回pdf文件,然后将pdf文件创建到磁盘上。 它可能没有多大帮助,但这是我目前得到的:
问题内容: 我正在搜索轻量级API(最好是单个类)以转换 到xml,反之亦然,将XML转换回Map。 例: 结果: 然后回来: 我不想使用JAXB或JSON转换API。只需简单的情况,它就不必处理嵌套的地图或属性或其他任何内容。有什么建议么? 编辑:我创建了一个工作副本并粘贴示例。感谢fvu和Michal Bernhard。 下载最新的XStream框架,“仅核心”就足够了。 不需要转换器或其他任
问题内容: 如何在Python中将HTML实体转换为Unicode,反之亦然? 问题答案: 您需要有BeautifulSoup。
问题内容: 我正在寻找一种将NumPy数组传递给Matlab的方法。 我已经设法通过使用将数组存储到图像中,然后使用加载它来做到这一点,但这当然会使矩阵包含0到256之间的值,而不是“真实”值。 将这个矩阵的乘积除以256,再加上原始NumPy数组中的最大值,可以得出正确的矩阵,但是我觉得这有点乏味。 有没有更简单的方法? 问题答案: 当然,只要使用 举个例子: 同样,有。 然后,您使用将其加载到
问题内容: 使用以下代码获取字符串并将其转换为二进制: 输出: 如果我将其放到该站点(位于右侧站点)中,则会得到hello回信。我想知道它使用什么方法。我知道我可以将二进制字符串拼接成8,然后将其与相应的值进行匹配或以其他方式进行匹配。真正在寻找更简单的东西。 问题答案: 对于[ -~]Python 2 范围内的ASCII字符: 相反: 在Python 3.2+中: 相反: 要在Python中支持
问题内容: 我正在生成密钥,需要将其存储在数据库中,因此我将其转换为字符串,但是要从字符串中获取密钥。有哪些可能的方法可以做到这一点? 我的代码是 如何从字符串取回密钥? 问题答案: 您可以将转换为字节数组(),然后Base64将其编码为。要转换回a ,Base64 会对String进行解码,并在a中使用它来重建您的原始字符串。 对于Java 8 字符串的SecretKey: 字符串到Secret