我正在尝试显示已注册网站用户及其用户角色的列表。用户数据存储在一个表中,并与索引用户及其角色(例如ROLE_DEFAULT_USER、ROLE_DEVELOPER、ROLE_ADMIN)
但在角色列中,我得到了一个看起来像内存地址的东西。
当每个用户的角色列表添加到其UserDto时,我可以看到角色的名称。
我在用
xmlns:th=”http://www.thymeleaf.org“
显示表行的HTML代码是
<tr th:each="user : ${users}">
<td><span th:text="${user?.name}"> name </span></td>
<td><span th:text="${user?.email}"> email </span></td>
<td><span th:text="${user?.businessName}"> business name </span></td>
<td><span th:text="${user?.roles}"> role </span></td>
<td>Edit</td>
</tr>
我尝试了<tdth:text="${user.roles.name}">角色</td>
但是这会引发这个错误“Property or field 'name' cannot be found on object of type 'org.hibernate.collection.spi.PersistentBag' - maybe not public or not valid?“
UserDto和User类都具有
private List<Role> roles = new ArrayList<>();
public List<Role> getRoles() {
return roles;
}
AuthController中的Map为
@GetMapping("/users")
public String users(Model model){
List<UserDto> users = userServiceImpl.findAllUsers();
model.addAttribute("users", users);
return "users";
}
UserServiceImpl具有
@Override
public List<UserDto> findAllUsers() {
List<User> users = userRepository.findAll();
return users.stream()
.map((user) -> mapToUserDto(user))
.collect(Collectors.toList());
}
private UserDto mapToUserDto(User user) {
UserDto userDto = new UserDto();
userDto.setName(user.getName());
userDto.setOrganization(user.getOrganization());
userDto.setEmail(user.getEmail());
userDto.setBusinessName(user.getBusinessName());
userDto.setPhoneNumber(user.getPhoneNumber());
userDto.setPostCode(user.getPostCode());
userDto.setAddress(user.getAddress());
userDto.setUsagePurpose(user.getUsagePurpose());
userDto.setRoles(user.getRoles());
return userDto;
}
1条答案
按热度按时间xxslljrj1#
在类
Role
中,您应该实现(覆盖)toString()
方法并返回name
字段。**背景:**如果
toString()
方法没有为特定类实现,Java将使用Object类的toString()
方法实现,它只返回示例的内部名称:这就是你目前在前端看到的。
此外,您可以在UserDto类中实现toString()方法,以获得角色集合的漂亮输出。而不是带有方括号的默认值:[ROLE_DEFAULT_USER,ROLE_DEVELOPER]