Commit 0b188b34 by Patryk Czarnik

BindingResult

parent 7695428f
...@@ -4,6 +4,7 @@ import jakarta.validation.Valid; ...@@ -4,6 +4,7 @@ import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -57,19 +58,29 @@ public class ProductController { ...@@ -57,19 +58,29 @@ public class ProductController {
} }
@PostMapping({"/{id}/edit", "/new"}) @PostMapping({"/{id}/edit", "/new"})
public String saveProduct(@Valid Product product) { public String saveProduct(@Valid Product product,
BindingResult bindingResult) {
// W tej wersji dane z wypełnionego formularza odbieramy w postaci jednego obiektu Product. // W tej wersji dane z wypełnionego formularza odbieramy w postaci jednego obiektu Product.
// Na taki obiekt mówi się czasami "form backing bean". // Na taki obiekt mówi się czasami "form backing bean".
// Spring sam wpisze dane do pól o takich samych nazwach. // Spring sam wpisze dane do pól o takich samych nazwach.
// Taki parametr od razu staje się częścią modelu (to jest tzw. ModelAttribute) // Taki parametr od razu staje się częścią modelu (to jest tzw. ModelAttribute)
// W tej wersji z adnotacją @Valid obiekt jest walidowany przed wywołaniem tej metody. // Kwestia Bean Validation:
// Jesli nie spełnia warunków → bład 400. // W tej wersji przed parametrem Product jest adnotacja @Valid
// i dodatkowo do metoda posiada parametr BindingResult.
// Wówczas Spring dokonuje walidacji obiektu przed wywołaniem tej metody
// i informacje o wyniku walidacji przekazuje w parametrze BindingResult.
// Metoda jest wywoływana zawsze, a to programista ma sprawdzić czy walidacja się powiodła.
// W BindingResult znajdują się też informacje o błędach.
if(bindingResult.hasErrors()) {
System.err.println("Błędy w formulazu: " + bindingResult.getAllErrors());
// nie próbujemy robić save
} else {
System.out.println("id przed zapisem: " + product.getProductId()); System.out.println("id przed zapisem: " + product.getProductId());
// Gdyby obiekt nie spełniał warunków walidacji, to zostanie odrzucony przez metodę save. Będzie wyjątek. // Gdyby obiekt nie spełniał warunków walidacji, to zostanie odrzucony przez metodę save. Będzie wyjątek.
productRepository.save(product); productRepository.save(product);
System.out.println("id po zapisie: " + product.getProductId()); System.out.println("id po zapisie: " + product.getProductId());
}
return "product_form"; return "product_form";
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment