luchob/softuni-feb2023

Продължение

Closed this issue · 1 comments

Привет, Лъчо дебъгера го оправих както каза, тръгна вече. Пушнах и кода, че верно съм го била забравила.

https://github.com/MariaBonkova/3D-printing-project

luchob commented

Здравей!

Окей, ще се опитам да обясня... Когато създаваме един обект, например поръчка в твоя случай трябва да имаме една HTML форма с някакви контроли (input, dropdown, checkbox и т.н.) и method POST. Това означава, че се праща POST заявка към сървъра, а POST заявките се ползват като създаваме обект.

На сървъра тази пост заявка трябва да се обслужи по приблизително следния начин:

@PostMapping("/my-object")
    public String createOffer(@Valid CreateMyObjectDto createMyObjectDto,
                              BindingResult bindingResult, 
                              RedirectAttributes redirectAttributes) {
        if (bindingResult.hasErrors()) {
            redirectAttributes.addFlashAttribute("createOfferDto", createOfferDto)
                    .addFlashAttribute("org.springframework.validation.BindingResult.createOfferDto", bindingResult);

            return "redirect:/my-object";
        }

        long myObjectId = myObjectService.createMyObject(createMyObjectDto);

        return "redirect:/my-object/" + myObjectId;
    }

Тук имаме следните неща:

  1. CreateMyObjectDto едно DTO, което описва контролите във формата
  2. bindingResult - държи грешките
  3. redirectAttributes - добавя едирект атрибути

Контролерът трябва да се извика като натиснеш бутона за създаване на обект в браузъра. Заявката е POST. Ако има грешки трябва да редиректнеш към например /my-object където се визуализират грешките. Това ще се отрази като GET заявка. За нея след малко. Ако няма грешки и валидацията е успешна, то тогава трябва да извикаш сървис, който да създаде обекта. Накрая трябва да насочиш потребителя към някаква Thank you страница или към страница, където се виждат детайлите на новия обект. Т.е. имаме следните неща:

  1. Един @PostMapping("/my-object") който служи за да създаде обект от данните идващи от браузъра
  2. Един @GetMapping("/my-object") който да покаже празна форма ИЛИ такава със грешка. В един темплейт.
  3. Един @GetMapping("/my-object/<id>") който служи, за да изпише Thank you или да покаже детайли за новосъздадения обект.

Този патърн се нарича post-redirect-get и е доста фундаментален без значение на програмния език или фреймуърк.

Опитвам се да го нарисувам.

Screenshot 2023-03-27 at 16 33 33

Поздрави,
Л.