Controler nie powinen posiadać logiki:
@RequestMapping("/login")
public class LoginController {
@RequestMapping(method = GET)
public String login(
Model model,
@RequestParam(value = "logout", required = false) String logout,
@RequestParam(value = "failure", required = false) String login
){
if(logout != null){
model.addAttribute("logoutMessage", "You have been successfully logged out");
}
if(login != null){
model.addAttribute("failureMessage", "Login failed, check your nick and password");
}
return "loginPage";
}
}
Powinen tym sie zająć serwis podajać mu args.
Repository które nie jest repository, bardziej mu podpada po serwis gdyż sporo logiki tu jest:
if (result.hasErrors()) {
return "registrationPage";
}else if(!userRepository.isEmailAvailable(user.getEmail())){
result.addError(new ObjectError("email","An account already exists for this email"));
return "registrationPage";
}else if(!userRepository.isNickAvailable(user.getNick())){
result.addError(new ObjectError("nick","An account already exists for this nick"));
return "registrationPage";
}else{
user = setStartValuesForUser(user);
user.setPassword(passwordEncoder.encode(user.getPassword()));
userRepository.saveUser(user);
return "redirect:/profile/"+user.getNick();
}
}
Plus wydaje mi się że lambdą byłoby znacznie mniej kodu.
Dobry przykład kontrolera.
@RequestMapping(method = GET)
public String adminControlPanel(){
return "adminPage";
}
Prosty łatwy a właściwie uniwesalny, łatwy do przenoszenia w inny projekt.
Spring ma w domyśle swoje repository.
Query query = entityManager.createNativeQuery(
"SELECT fp.id, fp.title, fp.content, fp.date FROM forumpost AS fp "
+ "INNER JOIN forumcategory AS fc "
+ "ON fc.id = fp.idCategory "
+ "WHERE fc.id=?1");
query.setParameter(1, id);
można łatwiej używając queryParams. Unoikaj native jak najbardziej możliwe.
private LinkedList<ForumPost> mapToPostList(List<Object[]> posts){
Dlaczego na Object?
public interface UserRepository{
User getUserById(Long id);
User getUserByNick(String nick);
User getUserByEmail(String email);
List<User> getAllActiveUsers();
boolean isNickAvailable(String nick);
boolean isEmailAvailable(String email);
User saveUser(User user);
User update(User user);
void disableUser(User user);
void disableUserByNick(String nick);
Long countUsers();
}
Zapoznaj się z generetykami w JAVA.
Projekcik całkiem spoko, szkoda że nie masz LIVE version.