Tôi đang cố gắng để có được đôi chân của tôi ướt với Spring MVC 3.0, và trong khi tôi có thể làm cho nó hoạt động, tôi dường như không thể xử lý kịch bản này một cách hiệu quả.Spring MVC 3.0: Làm cách nào để xác thực biến đường dẫn toàn cầu cho tất cả các ánh xạ yêu cầu một cách hiệu quả?
Tôi có một bộ điều khiển với xử lý "/ {studyName}/mô-đun" tiền tố, và nó trông giống như sau: -
@Controller
@RequestMapping(value = "/{studyName}/module")
public class ModuleController {
@RequestMapping(...)
public ModelAndView getA(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
@RequestMapping(...)
public ModelAndView getB(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
@RequestMapping(...)
public ModelAndView getC(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
@RequestMapping(...)
public ModelAndView getD(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
}
Vấn đề với mã này được, tôi phải xác nhận studyName rải rác tất cả qua các phương pháp và có thể trong các phương pháp của Bộ điều khiển khác. Có cách nào tôi có thể thực hiện xác nhận trên biến đường dẫn studyName tất cả trong một chỗ mà không sử dụng một cái gì đó như AOP? Làm thế nào để bạn xử lý xác nhận như thế này?
Cảm ơn.
+1 cho bạn. Tôi đã xem xét @valid, nhưng trong trường hợp của tôi, tôi có thể phải tạo chú thích xác nhận tùy chỉnh của mình vì tôi cần kiểm tra xem studyName có được đăng ký trong cơ sở dữ liệu của tôi hay không, vì vậy tôi không thể sử dụng tính năng xác thực được tích hợp từ trình xác thực hibernate. Đối với ràng buộc một validator, tôi vẫn cần phải kiểm tra "if (binder.hasErrors()) {làm cái gì đó}" trong mọi phương pháp của bộ điều khiển, đó là chính xác vấn đề tôi hiện đang phải đối mặt. Có lẽ, đó là giải pháp thanh lịch duy nhất có sẵn ngay bây giờ, nhưng nó thực sự lỗi tôi thấy rằng cùng một kiểm tra lặp đi lặp lại trong mọi phương pháp. – limc
Nếu xác thực của bạn là kiểm tra xem có gì đó tồn tại trong DB hay không, giả sử nó có khả năng, tôi chỉ cần thực hiện truy vấn và đăng ký phương thức @ExceptionHandler để xử lý trường hợp không xảy ra. – GaryF
Theo như tôi có thể nói, bạn không thể sử dụng chú thích hợp lệ với PathVariable: https://jira.springsource.org/browse/SPR-6380 –