java不知道如何查找ByRole以返回自定义的用户列表
我正在尝试根据角色列出应用程序中的用户。我的控制器中有一个端点,它试图调用我的userService类。findByRoles方法,但我不知道如何在没有字符串角色的情况下放置我想要的角色(行不通)
管理员控制器。java方法:
@GetMapping(path="/users")
public String showUsers( Model model){
var userList = (List<User>) userService.findByRoles("ROLE_TEACHER"); // dont know how to pass a role here
model.addAttribute("userList", userList);
return "users";
}
用户。java:
@Entity
@Table(name = "user_table", schema = "public")
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long user_id;
@Column(name = "name")
private String name;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@Column(name = "confirmed")
private boolean confirmed;
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.DETACH}, fetch = FetchType.EAGER)
@JoinTable(
name = "user_role_table",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "role_id"))
private Collection<Role> roles = new HashSet<>();
/*******************************************
* Setters and getters
*******************************************/
public Long getId() {
return user_id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public void setConfirmed(Boolean confirmed) {
this.confirmed = confirmed;
}
public Boolean getConfirmed() {
return confirmed;
}
public void setRoles(Collection roles) {
this.roles = roles;
}
public Collection<Role> getRoles() { return this.roles;
}
}
用户存储库:
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
User findByEmail(String email);
User findByRoles(Role role);
}
角色还原性:
public interface RoleRepository extends JpaRepository<Role, Long> {
Role findByName(String name);
}
IUserService。java:
public interface IUserService {
User registerNewUserAccount(UserDto userDto);
List<User> findAll();
Optional<User> findById(Long id);
User findByRoles(Role role);
public void delete(Long id);
public User updateConfirmed(Long id);
}
用户服务。java方法:
@Override
public User findByRoles(Role role) {
return userRepository.findByRoles(role);
}
有什么建议可以帮助我解决这个问题吗
# 1 楼答案
在对这些类进行了调整之后,我认为解决这个问题最合理的方法是使用roleRepository方法findByName。此外,在userRepository、IUserService&;用于返回列表的UserService(请查看我对此答案的评论)
已更改IUserService。java到:
已更改用户服务。java方法,用于:
更改了管理员控制器。java方法,用于: