Java springmvc中的验证
如何在validator类中获取请求对象,因为我需要验证请求对象中的内容(即参数) 不是100%确定我是否正确地回答了您的问题,但是使用Spring MVC,您可以将对象传递到方法中并对其进行注释(至少使用Spring 3),如下所示:Java springmvc中的验证,java,spring,spring-mvc,validation,Java,Spring,Spring Mvc,Validation,如何在validator类中获取请求对象,因为我需要验证请求对象中的内容(即参数) 不是100%确定我是否正确地回答了您的问题,但是使用Spring MVC,您可以将对象传递到方法中并对其进行注释(至少使用Spring 3),如下所示: @RequestMethod(value = "/accounts/new", method = RequestMethod.POST) public String postAccount(@ModelAttribute @Valid Account accou
@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");
}
}
}
公共类PersonValidator实现验证器{
/**
*此验证器只验证个人实例
*/
公共布尔支持(类clazz){
返回人.class.equals(clazz);
}
公共无效验证(对象obj,错误e){
ValidationUtils.rejectIfEmpty(e,“name”,“name.empty”);
人员p=(人员)obj;
if(p.getAge()<0){
e、 拒绝价值(“年龄”、“负面价值”);
}else if(p.getAge()>110){
e、 拒绝价值(“年龄”、“太老了”);
}
}
}
另请参见
- JSR303(Bean验证)验证器
- 弹簧验证器
- 您有两种选择:
对于JSR303您需要Spring3.0,并且必须使用JSR303注释来注释您的模型类,并在Web控制器处理程序方法中写入@Valid-front-your参数。(像)。此外,您必须在配置中启用此功能:
<!-- JSR-303 support will be detected on classpath and enabled automatically -->
<mvc:annotation-driven/>
有关更多详细信息,请参阅Spring参考资料第章
顺便说一句:在Spring2中,SimpleFormController中有一个类似于
setValidator
的属性 您可以轻松添加另一个带有HttpServletRequest参数的方法
public void validateReq(Object target, Errors errors,HttpServletRequest request) {
// do your validation here
}
请注意,您并没有在这里重写某个方法我在使用spring validator validate captcha时也遇到了同样的问题。 在验证器实现程序中,我希望从HttpSession(从HttpServletRequest get HttpSession)获取正确的captcha 没有找到任何好的代码,让它在验证器,如此糟糕 以下是一些折衷方案:
public class UserRegisterDto {
private String correctCaptcha;
//getter,setter
}
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";
}
}
设置SpringValidator会隐藏hibernate验证特性(JSR303)。有没有办法保持hibernate验证并额外使用自己的spring验证器?@Saram:我强烈建议使用JSR303而不是spring验证器。--不管怎样,如果你想问一些问题,就发布一个新问题。你可以使用
binder.addValidator(newfoodalidator())代码>将这两种验证方法结合起来。抱歉,这不起作用,也许使用SpringMVC拦截器是一个好的解决方案
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";
}
}