Commit 1d50dbbd by Patryk Czarnik

@Valid

parent ba270f8c
...@@ -4,6 +4,8 @@ import java.math.BigDecimal; ...@@ -4,6 +4,8 @@ import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
...@@ -60,7 +62,7 @@ public class ProductController { ...@@ -60,7 +62,7 @@ public class ProductController {
@PostMapping({"/products/new", "/products/{id}/edit"}) @PostMapping({"/products/new", "/products/{id}/edit"})
public String saveProduct( public String saveProduct(
Product product, @Valid Product product,
Model model) { Model model) {
// 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.
// Spring sam wpisze dane do pól o takich samych nazwach. // Spring sam wpisze dane do pól o takich samych nazwach.
...@@ -68,11 +70,10 @@ public class ProductController { ...@@ -68,11 +70,10 @@ public class ProductController {
// i nie trzeba dodawać go w osobnym poleceniu. // i nie trzeba dodawać go w osobnym poleceniu.
// Kwestia Bean Validation: // Kwestia Bean Validation:
// W tej wersji (bez adnotacji @Valid) Spring wchodzi do tej metody // W tej wersji przed parametrem Product jest adnotacja @Valid
// i dopiero podczas próby zapisania obiektu operacją save Hibernate // a nie ma parametru BindingResult.
// dokonuje walidacji obiektu względem adnotacji. // Wówczas Spring dokonuje walidacji obiektu przed wywołaniem tej metody
// W przypadku niezgodności wyrzucany jest wyjątek, a obiekt nie jest zapisywany. // i w przypadku błędów walidacji NIE WYWOŁA tej metody, tylko zwróci błąd 400.
// Dzieje się to jeszcze zanim dane trafią do bazy danych.
try { try {
System.out.println("Produkt przed zapisem: " + product); System.out.println("Produkt przed zapisem: " + product);
productRepository.save(product); productRepository.save(product);
......
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