如何获取验证器类中的请求对象,因为我需要验证内容,即请求对象中存在的参数。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. MultiActionController中的Spring MVC验证
- 3. Spring MVC:@RequestParam验证
- 4. Spring MVC Bean验证
- 5. 在Spring MVC中验证
- 6. Spring MVC的验证其余
- 7. Spring MVC的注解验证
- 8. Spring MVC的表单验证
- 9. Spring MVC的绑定/验证
- 10. Spring MVC的验证模型
- 11. Spring MVC验证抛出ConstraintViolationException
- 12. Spring MVC 3 - >验证
- 13. Jpa和spring 3 mvc验证
- 14. spring-mvc表单验证
- 15. Spring 3 MVC请求验证
- 16. Spring MVC和Ajax验证
- 17. Spring MVC用户验证
- 18. Spring MVC Google Search Console验证
- 19. 在Spring MVC中输入验证
- 20. Spring MVC的Hibernate验证器组
- 21. Spring MVC的验证状态400
- 22. 使用注解进行Spring MVC验证
- 23. Spring MVC日期格式验证JSR303
- 24. Spring MVC i18n验证错误消息
- 25. Spring 3 MVC Hibernate验证,hasErrors后出错?
- 26. Spring MVC文件上传 - 验证
- 27. Spring MVC验证 - 避免POST回
- 28. Spring 3.0 MVC客户端验证
- 29. Spring MVC和JSR 303 - 手动验证
- 30. Spring MVC跳过验证器类
设置弹簧验证隐藏冬眠验证功能(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