Skip to content

2.3.2 Thực hiện xác thực khi binding form

Bây giờ bạn đã khai báo cách mà một TacoTacoOrder nên được xác thực, chúng ta cần xem lại từng controller, chỉ định rằng việc xác thực cần được thực hiện khi các form được gửi (POST) đến các phương thức xử lý tương ứng của chúng.

Để xác thực một Taco đã gửi, bạn cần thêm annotation @Valid của JavaBean Validation API vào đối số Taco trong phương thức processTaco() của DesignTacoController, như được minh họa dưới đây.

Listing 2.13 Xác thực một Taco được gửi bằng POST

java
import javax.validation.Valid;
import org.springframework.validation.Errors;

...

  @PostMapping
  public String processTaco(@Valid @ModelAttribute("taco") Taco taco, Errors errors) {
    if (errors.hasErrors()) {
      return "design";
    }
    // Save the taco...
    // We'll do this in chapter 3
    log.info("Processing taco: " + taco);

    return "redirect:/orders/current";
  }

Annotation @Valid yêu cầu Spring MVC thực hiện việc xác thực đối tượng Taco sau khi nó được binding với dữ liệu từ form đã gửi và trước khi phương thức processTaco() được gọi. Nếu có lỗi xác thực, thông tin chi tiết về các lỗi đó sẽ được lưu trong một đối tượng Errors được truyền vào processTaco(). Một vài dòng đầu tiên trong processTaco() sẽ kiểm tra đối tượng Errors, gọi phương thức hasErrors() để xem có lỗi nào không. Nếu có lỗi, phương thức sẽ kết thúc mà không xử lý Taco và trả về tên view "design" để hiển thị lại form.

Để thực hiện xác thực đối với các đối tượng TacoOrder đã gửi, bạn cũng cần thực hiện các thay đổi tương tự trong phương thức processOrder() của OrderController, như được minh họa trong đoạn mã tiếp theo.

Listing 2.14 Xác thực một TacoOrder được gửi bằng POST

java
@PostMapping
public String processOrder(@Valid TacoOrder order, Errors errors) {
  if (errors.hasErrors()) {
    return "orderForm";
  }

  log.info("Order submitted: " + order);
  return "redirect:/";
}

Trong cả hai trường hợp, phương thức sẽ được phép xử lý dữ liệu đã gửi nếu không có lỗi xác thực. Nếu có lỗi xác thực, yêu cầu sẽ được chuyển tiếp đến view form để người dùng có cơ hội sửa lỗi của mình.

Nhưng làm thế nào để người dùng biết lỗi nào cần sửa? Trừ khi bạn hiển thị các lỗi đó trên form, người dùng sẽ phải đoán cách để gửi form thành công.

Released under the MIT License.