2011-02-04 18 views
8

Tôi đã tìm kiếm một khoảng thời gian không may mắn. Tôi là không phải sử dụng Spring MVC nhưng vẫn muốn sử dụng @javax.validation.Valid để bật xác thực đối số phương thức. Để đưa ra một ví dụCó cách nào chuẩn để kích hoạt tính năng Xác thực Bean JSR 303 hay không bằng cách sử dụng các đối số phương thức chú thích

public class EventServiceImpl implements IEventService { 
    @Override 
    public void invite(@Valid Event event, @Valid User user) { ... } 
} 

Sử dụng MVC, điều này được kích hoạt cho @Controller đậu chú thích với một đơn giản <mvc:annotation-driven/> (xem 5.7.4.3 Configuring a JSR-303 Validator for use by Spring MVC).

Sử dụng AOP nên khá tầm thường. Tuy nhiên, tôi nghi ngờ có một số cách tiêu chuẩn để làm điều này. Do đó câu hỏi: Có một điều tương tự cho các ứng dụng không phải MVC và các bean không điều khiển để cho phép xác thực đầu vào cho các bean được chú thích không?

Trả lời

6

Xác thực cấp phương thức không phải là một phần của đặc tả Xác thực Bean (JSR 303). Xác thực cấp phương thức là đề xuất trong thông số được thêm vào trong appendix C.

Hibernate Validator 4.2 (phiên bản beta đã hết) đang triển khai đề xuất này và cho phép đặt chú thích JSR 303 trên tham số phương thức và giá trị trả lại. Tất nhiên bạn vẫn sẽ cần một số mã keo mùa xuân, nhưng điều đó không nên quá khó.

Ngoài ra xác thực Bean 1.1 sẽ thêm xác thực cấp phương thức chính thức vào thông số (không chỉ là phụ lục/đề xuất). Xem thêm http://beanvalidation.org/

3

Sử dụng MVC, điều này được kích hoạt cho @Controller chú thích đậu

@Valid chỉ là một dấu hiệu trong đậu khiển mà giấu mã mà không được xác nhận và đặt tất cả các vi phạm hạn chế trong Errors trong một đẹp đường. Các nhà thiết kế mùa xuân có thể đã phát minh chú thích của riêng họ để làm điều tương tự.

Việc sử dụng thực sự chú thích @Valid nằm trong lớp (bean) mà bạn đang xác thực với trình xác thực JSR 303 và việc sử dụng chính của nó là xác thực biểu đồ đối tượng. Có nghĩa là một bean có thể có các tham chiếu bean khác với chú thích @Valid để kích hoạt đệ quy xác thực. Bên ngoài MVC, bạn có thể sử dụng trình xác nhận cấu hình để xác thực bất kỳ bean nào sử dụng chú thích JSR 303 nhưng không giống như bộ điều khiển Errors độc đáo trong bộ điều khiển, bạn sẽ phải tự quyết định mình sẽ làm gì với vi phạm ràng buộc.

Vì vậy, để trả lời câu hỏi của bạn, không có cách tiêu chuẩn. Để có sự xuất hiện giống như trong bộ điều khiển, bạn có thể sử dụng chú thích @Valid (hoặc tạo chú thích mới) để chạy lời khuyên AOP để xác thực một bean và điền vào một 'ViolationCollector' (giống như Lỗi trong MVC) phải được chuyển đến phương pháp.

Các vấn đề liên quan