#4 Kodujemy!

Kodujemy! Wreszcie nastał ten dzień, w którym dodaję notkę na bloga z jakimś już postępem odnośnie projektu. W tym wpisie zajmiemy się dodaniem funkcjonalności takich jak: rejestracja użytkownika (na razie bez logowania), dodawaniem rekordu do bazy danych tak aby po wejściu na stronę /{IdObrazka} został dodany ID i nazwa url. Na sam początek te dwa rekordy powinny wystarczyć w późniejszym etapie na pewno je rozszerzymy. Natomiast nie będę omawiał podstawowej konfiguracji Springa – na to poświęcę osobny wpis, myślę że każdy programista, który zaczyna ze Springiem powinien mieć takie gotowe „ziarenko”, ponieważ konfiguracja potrafi być dość uciążliwa, a zajmowanie się tym od podstaw przy każdym (próbnym) projekcie to według mnie marnowanie czasu. 😉

Do rejestracji użytkownika będziemy potrzebowali przede wszystkim klasy User, lecz tego chyba nie trzeba omawiać. Interesować nas będzie UserController:

@Controller
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("userslist.json")
    public @ResponseBody List<User> getUserList() {
        return userService.getAllUsers();
    }

    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public @ResponseBody void addUser(@RequestBody User user) {
        userService.save(user);}

    @RequestMapping(value = "/updateUser", method = RequestMethod.PUT)
    public @ResponseBody void updateUser(@RequestBody User user) {
        userService.updateUser(user);}

    @RequestMapping("/layout")
    public String getUserPartialPage() {
        return "users/layout";}}
Adnotacja @Autowired służy nam do wstrzykiwania obiektu UserService.
Kolejno RequestMapping z userslist.json wykorzystamy do wyświetlania listy użytkowników, który będzie widoczny w panelu admina.
Następny z metodą POST będzie nam służył do przesyłania parametrów użytkownika (takich jak username, password), a następnie zapisywał je w bazie danych.
Jak już pewnie zauważyłeś /updateUser ma metodę PUT, dzięki niej będziemy mogli zaktualizować pewne informacje na przykład mail.

Pora na ImageController

@RequestMapping("/image")
@Controller
public class ImageController {


    @Autowired
    private ImageService imageService;


    @RequestMapping(value = "/addImage", method = RequestMethod.POST)
    public @ResponseBody void addImage(@RequestBody Image image) {imageService.addImage(image); }

    @RequestMapping(value = "/{image}")
    public String redirect() {
        return "image/layout";
    }}
@RequestMapping("/image")
@Controller
public class ImageController {


    @Autowired
    private ImageService imageService;


    @RequestMapping(value = "/addImage", method = RequestMethod.POST)
    public @ResponseBody void addImage(@RequestBody Image image) {imageService.addImage(image); }

    @RequestMapping(value = "/{image}")
    public String redirect() {return "image/layout";}}

Zauważyłeś pewne podobieństwo? Schemat przy tworzeniu controllerów jest praktycznie ten sam, lecz tutaj mogłeś zauważyć na dziwny fragment value = „/{image}. Co to właściwie oznacza? Ano to że niezależenie co użytkownik wpisze zostanie przekierowany do odpowiedniej strony. Na przykład nasza-strona.com/abc – to tylko taki prosty przykład u nas to będzie wykorzystane trochę inaczej, ale jeśli zaciekawiłeś się tym warto abyś zapoznał się z adnotacją @PathVariable (tutorial).

Przy tworzeniu Controllerów nie możemy zapomnieć o interfesjach i ich implementacji bez których nie byłoby tak łatwo.

Interfejs UserService

public interface UserService {
    public List<User> getAllUsers();

    public User getUserById(Long id);

    public void updateUser(User user);

    public void save(User user);}

W nim jedynie deklarujemy nazwy metod i jaki typ argumentów przyjmują.

Implementacja UserServiceImpl

@Service("userService")
public class UserServiceImpl implements UserService {
    private static List<User> userList = new ArrayList<User>();
    private static Long id = 0L;

    @Override
    public List<User> getAllUsers() {return userList;}

    @Override
    public User getUserById(Long id) {return findUserById(id);}

    @Override
    public void save(User user)
    {
        user.setId(++id);
        userList.add(user);

        HibernateUtil hibernateUtil = new HibernateUtil();
        SessionFactory sessFact = hibernateUtil.getSessionFactory();
        Session session = sessFact.getCurrentSession();
        org.hibernate.Transaction tr = session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
        tr.commit();}

    @Override
    public void updateUser(User user) {
        User foundUser = findUserById(user.getId());
        if (foundUser != null) {
            userList.remove(foundUser);
            userList.add(user);
        }
    }

    private User findUserById(Long id) {
        for (User user : userList) {
            if (user.getId() == id) {
                return user;}}
return null; }}

Teraz rozpisujemy się co konkretna metoda ma za zadanie robić jak zwracać listę użytkowników, wyszukiwać konkretnego użytkownika.

Zastosowana obecnie metoda zapisywania użytkownika do bazdy danych, jest nie do końca poprawna. W następnym wpisie zastosuję EntityManager’a, który zdecydowanie lepiej się sprawdza do tego typu zadań.

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *