Skip to content
Advertisement

Why users are not displayed from the database?

I can’t get a list of users from the database.I am assuming userService.allUsers () = null. But why? I have no idea. Since there are users in the database. Please tell me what is wrong with my code? It does not give me any errors in the logs. AdminController

@Controller
@RequestMapping("/forAdmin")
public class AdminController {

@Autowired
private UserService userService;

@GetMapping("/")
public String index(Model model) {
    return "index";
}

@GetMapping("/forAdmin")
public String userList(Model model) {

    Iterable<User> allUser = userService.allUsers();

    if(allUser != null){
        model.addAttribute("allUsers", allUser);
    } else {
        return "redirect:/index";
    }

    return "forAdmin";
}

Class UserService

@Service
public class UserService implements UserDetailsService {

@PersistenceContext
private EntityManager em;
@Autowired
public UserRepository userRepository;
@Autowired
public RoleRepository roleRepository;
@Autowired
public BCryptPasswordEncoder bCryptPasswordEncoder;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userRepository.findByUsername(username);
    if (user == null) {
        throw new UsernameNotFoundException("Пользователь не найден");
    }
    return user;
}

public User findUserById(Long userId) {
    Optional<User> userFromDb = userRepository.findById(userId);
    return userFromDb.orElse(new User());
}

public List<User> allUsers() {
    return userRepository.findAll();
}

public boolean saveUser(User user) {
    User userFromDB = userRepository.findByUsername(user.getUsername());

    if (userFromDB != null) {
        return false;
    }

    user.setUsername(user.getUsername());
    user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
    user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
    userRepository.save(user);
    return true;
}

public boolean deleteUser(Long userId) {
    if (userRepository.findById(userId).isPresent()) {
        userRepository.deleteById(userId);
        return true;
    }
    return false;
}

}

ForAdmin.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml" xmlns:c=""
  xmlns:el="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>forAdmin</title>
</head>
<body>
  <h2> Admin Page</h2>
  <a th:href="@{/index}">Main</a>

  <div th:each= "el :${allUsers}">
     <p th:text="${el.id}" />
     <p th:text="${el.username}" />
  </div>

</body>
</html>

Interface UserRepository

@Component
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
  User findByUsername(String username);
}

I do not even understand why nothing is written to me in the logs, as if the data does not reach thymeleaf.Tell me what is wrong with my code?

Advertisement

Answer

Actually i might already know what your problem is – you have defined the endpoint forAdmin twice: once at class level and once again with @GetMapping. The resulting endpoint is localhost/forAdmin/forAdmin and of course if you have been using localhost/forAdmin the endpoint wouldn’t get loaded

Advertisement