Java Don';我不知道如何查找ByRole以返回自定义的用户列表

Java Don';我不知道如何查找ByRole以返回自定义的用户列表,java,spring,Java,Spring,我正在尝试根据角色列出应用程序中的用户。我的控制器中有一个端点,它试图调用我的userService class.findByRoles方法,但我不知道如何在不将角色作为字符串的情况下放置我想要的角色(行不通) adminController.java方法: @GetMapping(path="/users") public String showUsers( Model model){ var userList = (List<User>) userSe

我正在尝试根据角色列出应用程序中的用户。我的控制器中有一个端点,它试图调用我的userService class.findByRoles方法,但我不知道如何在不将角色作为字符串的情况下放置我想要的角色(行不通)

adminController.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";
}
@Override
public User findByRoles(Role role) {
    return userRepository.findByRoles(role);
}

关于如何解决这个问题,有什么建议吗?

在对这些类进行调整之后,我认为解决这个问题最合理的方法是使用roleRepository方法findByName。此外,在userRepository、IUserService和UserService中创建了findAllByRoles以返回列表(查看我对这个答案的评论)

将IUserService.java更改为:

public interface IUserService {

     User registerNewUserAccount(UserDto userDto);

     List<User> findAll();

     Optional<User> findById(Long id);

     List<User> findAllByRoles(String roles); //Added this new method (VERY IMPORTANT for returning multiple users)

     User findByRoles(String roles);

     public void delete(Long id);

     public User updateConfirmed(Long id);
}
公共接口IUserService{
用户注册Wuseraccount(UserDto UserDto);
列出findAll();
可选的findById(长id);
List findAllByRoles(字符串角色);//添加了这个新方法(对于返回多个用户非常重要)
用户findByRoles(字符串角色);
公共无效删除(长id);
公共用户更新已确认(长id);
}
将UserService.java方法更改为:

@Override
public User findByRoles(String roles) {
    return userRepository.findByRoles(roleRepository.findByName(roles)); // Using roleRepository here
}

// Added below findAllbyRoles to return a list

@Override
public List<User> findAllByRoles(String roles){
    return userRepository.findAllByRoles(roleRepository.findByName(roles));
}
@GetMapping(path="/users")
public String showUsers( Model model){
    List<User> userList = userService.findAllByRoles("ROLE_STUDENT");
    userList.addAll(userService.findAllByRoles("ROLE_TEACHER"));
    model.addAttribute("userList", userList);
    return "users";
}
@覆盖
公共用户findByRoles(字符串角色){
返回userRepository.findByRoles(roleRepository.findByName(roles));//在此处使用roleRepository
}
//在findAllbyRoles下面添加以返回列表
@凌驾
公共列表findAllByRoles(字符串角色){
返回userRepository.findAllByRoles(roleRepository.findByName(roles));
}
将adminController.java方法更改为:

@Override
public User findByRoles(String roles) {
    return userRepository.findByRoles(roleRepository.findByName(roles)); // Using roleRepository here
}

// Added below findAllbyRoles to return a list

@Override
public List<User> findAllByRoles(String roles){
    return userRepository.findAllByRoles(roleRepository.findByName(roles));
}
@GetMapping(path="/users")
public String showUsers( Model model){
    List<User> userList = userService.findAllByRoles("ROLE_STUDENT");
    userList.addAll(userService.findAllByRoles("ROLE_TEACHER"));
    model.addAttribute("userList", userList);
    return "users";
}
@GetMapping(path=“/users”)
公共字符串showUsers(模型){
List userList=userService.findAllByRoles(“角色学生”);
userList.addAll(userService.findAllByRoles(“角色教师”);
model.addAttribute(“userList”,userList);
返回“用户”;
}

我遇到了另一个问题。在本例中,userList实际上根本不是一个列表。它是一个单一的用户。如果有一个用户被分配到角色\教师,它将工作,但如果有多个用户共享该角色,它将中断。现在已修复,请编辑答案以包含修复。
@Override
public User findByRoles(String roles) {
    return userRepository.findByRoles(roleRepository.findByName(roles)); // Using roleRepository here
}

// Added below findAllbyRoles to return a list

@Override
public List<User> findAllByRoles(String roles){
    return userRepository.findAllByRoles(roleRepository.findByName(roles));
}
@GetMapping(path="/users")
public String showUsers( Model model){
    List<User> userList = userService.findAllByRoles("ROLE_STUDENT");
    userList.addAll(userService.findAllByRoles("ROLE_TEACHER"));
    model.addAttribute("userList", userList);
    return "users";
}