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