我的应用程序中有一个用户实体,需要验证.
public class User { private String userName; private String password; public void setUserName(String userName){ this.userName = userName; } public getUserName(){ return this.userName; } // and so on
}
为此我创建了一个UsersValidator,如下所示.
public class UserValidator implements Validator { public boolean supports(Class clazz) { return User.class.equals(clazz); } public void validate(Object obj,Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors,"userName","field.required"); ValidationUtils.rejectIfEmptyOrWhitespace(errors,"password","field.required"); } }
我有这样的控制器
@RequestMapping(value = "/login",method = RequestMethod.POST) public String home(@Valid User user,BindingResult result) { if (result.hasErrors()) { return "loginForm"; } else { //continue } }
绑定结果没有任何错误.
为了验证工作,还需要做些什么?我在控制器或弹簧配置文件中进行了任何更改.
<mvc:annotation-driven /> <context:component-scan base-package="com.myapp" /> <mvc:resources location="/resources/" mapping="/resources/**" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.tiles2.TilesView</value> </property> </bean> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> <property name="definitions"> <list> <value>/WEB-INF/tiles.xml</value> </list> </property> </bean> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>com/dimex/resourceBundles/ApplicationResources</value> <value>com/dimex/resourceBundles/errors</value> </list> </property> </bean> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="locale"></property> </bean> </mvc:interceptors> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="en" /> </bean>
编辑:-
我需要在我的类路径中使用hibernate验证器.我们没有在我们的应用程序中使用hibernate.
请帮忙.
EDIT2: –
当我在实体类中直接使用验证注释(@NotNull,@Size等)时,控制器中的@Valid注释工作,但是如果我从我的实体中删除它们,并尝试使用上面写的验证器,那么@Valid不起作用.
是这样的@Valid注释只能在实体中使用验证注释,而不与验证器一起使用?为了使用我的验证器,我必须直接在我的验证器中调用validate方法?
解决方法
从我所理解的,您正在尝试将
JSR-303 @Valid注释与经典弹簧验证相结合.你为什么想做这个? UserValidator类的等效JSR-303注释将如下所示:
@NotNull @Size(min=1) private String userName; @NotNull @Size(min=1) private String password ...
弹簧documentation说明了配置JSR-303验证所需的步骤.您需要使用hibernate验证器(或另一个JSR-303提供程序)才能使上述功能正常工作.您还需要如下配置验证器bean.
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorfactorybean"/>
这个问题的其他答案也是一样的.