如何獲取驗證器類中的請求對象,因爲我需要驗證內容,即請求對象中存在的參數。Spring MVC中的驗證
回答
不是100%肯定,我正確地按照你的問題,但與Spring MVC的,你傳遞對象到方法和註釋它(至少在春季3),像這樣:
@RequestMethod(value = "/accounts/new", method = RequestMethod.POST)
public String postAccount(@ModelAttribute @Valid Account account, BindingResult result) {
if (result.hasErrors()) {
return "accounts/accountForm";
}
accountDao.save(account);
}
的這裏的相關注釋是@Valid,它是JSR-303的一部分。包含BindingResult參數也是如此,因此您可以檢查錯誤,如上所述。
使用簡單的驗證器(您的自定義驗證器) 您不需要請求對象在驗證器中獲取參數。你可以直接從它。
例如:這將檢查字段從要求符合名稱name
和age
public class PersonValidator implements Validator {
/**
* This Validator validates just Person instances
*/
public boolean supports(Class clazz) {
return Person.class.equals(clazz);
}
public void validate(Object obj, Errors e) {
ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
Person p = (Person) obj;
if (p.getAge() < 0) {
e.rejectValue("age", "negativevalue");
} else if (p.getAge() > 110) {
e.rejectValue("age", "too.darn.old");
}
}
}
請參見
你有兩個選擇:
- JSR 303(Bean驗證)驗證
- 春校驗
對於JSR 303你需要春季3.0和必須註解與JSR 303個註解模型類,寫一個@在Web控制器處理程序方法中,在您之前有效參數。 (如Willie Wheeler show in his answer)。 Additionaly你必須在配置啓用此功能:
<!-- JSR-303 support will be detected on classpath and enabled automatically -->
<mvc:annotation-driven/>
對於春校驗,你需要編寫驗證(見Jigar Joshi's answer)實現了org.springframework.validation.Validator接口。您必須在控制器中註冊您的驗證器。在Spring 3.0,你可以在註解的方法,一個@InitBinder
做到這一點通過WebDataBinder.setValidator
(setValidator它是超類DataBinder
的方法)
Example (from the spring docu)
@Controller
public class MyController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new FooValidator());
}
@RequestMapping("/foo", method=RequestMethod.POST)
public void processFoo(@Valid Foo foo) { ... }
}
有關詳細信息,看看Spring參考,章5.7.4 Spring MVC 3 Validation 。
順便說一句:在Spring 2中,SimpleFormController中有一些像setValidator
屬性。
您可以輕鬆地添加另一個方法與HttpServletRequest參數。
public void validateReq(Object target, Errors errors,HttpServletRequest request) {
// do your validation here
}
注意,你是不是覆蓋方法在這裏
我也有同樣的問題,當我使用的彈簧Validator是否驗證碼。 在驗證實現器中,我想從HttpSession(從HttpServletRequest獲取HttpSession)獲取正確的驗證碼。
沒有找到任何好的代碼讓它在驗證器中,太糟糕了!
有一些折中的方案如下:
在裝訂形式DTO添加其他字段(撥打:correctCaptcha),在控制器方法設置從HttpSession中字段的值,那麼你可以驗證在驗證器
public class UserRegisterDto { private String correctCaptcha; //getter,setter }
添加在結合形式DTO HttpServletRequest的基準,然後可以在驗證器使用它。
public class UserRegisterDto { private HttpServletRequest request; //getter ,setter } @RequestMapping(value = "register.hb", method = RequestMethod.POST) public String submitRegister(@ModelAttribute("formDto") @Valid UserRegisterDto formDto, HttpServletRequest request,BindingResult result) { formDto.setRequest(request); if (result.hasErrors()) { return "user_register"; } }
對不起,這是行不通的,也許使用Spring MVC攔截器是一個很好的解決方案 – monkeyk 2015-04-28 02:05:52
- 1. Spring MVC驗證
- 2. Spring MVC中的驗證器
- 3. MultiActionController中的Spring MVC驗證
- 4. Spring MVC:@RequestParam驗證
- 5. Spring MVC Bean驗證
- 6. 在Spring MVC中驗證
- 7. Spring MVC的註解驗證
- 8. Spring MVC的綁定/驗證
- 9. Spring MVC的驗證其餘
- 10. Spring MVC的表單驗證
- 11. Spring MVC的驗證模型
- 12. Spring MVC用戶驗證
- 13. Spring MVC前端驗證
- 14. Spring 3 MVC請求驗證
- 15. spring-mvc表單驗證
- 16. Spring MVC驗證拋出ConstraintViolationException
- 17. Spring MVC 3 - >驗證
- 18. Spring MVC和Ajax驗證
- 19. Spring MVC jQuery遠程驗證
- 20. Jpa和spring 3 mvc驗證
- 21. Spring MVC Google Search Console驗證
- 22. Spring MVC中的可配置驗證
- 23. 在Spring 3中驗證@RequestParam MVC
- 24. 在Spring MVC中輸入驗證
- 25. Spring MVC和顯示驗證過程中
- 26. 驗證我的形式在Spring MVC
- 27. 繼承類的Spring MVC驗證
- 28. Spring MVC的驗證狀態400
- 29. 驗證文件的問題Spring mvc 3
- 30. 如何驗證Spring MVC @PathVariable的值?
設置彈簧驗證隱藏冬眠驗證功能(JSR 303)。是否有任何方法來保持hibernate驗證,並且使用自己的spring驗證器? – Saram 2013-01-09 12:38:01
@Saram:我強烈建議使用JSR 303而不是spring驗證器。 - 無論如何,如果你想問一些問題,請發表一個新問題。 – Ralph 2013-01-09 12:59:18
您可以使用'binder.addValidator(new FooValidator());'結合兩種驗證方法。 – shadowhorst 2016-06-30 20:00:23