Java – invalid spring 3 validation
There is a user entity in my application that needs to be verified
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
}
To do this, I created a usersvalidator, as shown below
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"); } }
I have such a controller
@RequestMapping(value = "/login",method = RequestMethod.POST) public String home(@Valid User user,BindingResult result) { if (result.hasErrors()) { return "loginForm"; } else { //continue } }
There are no errors in the binding results
What else needs to be done to verify the work? I made any changes in the controller or spring configuration file
<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>
Edit:-
I need to use the hibernate validator in my classpath We don't use hibernate in our application Please help.
EDIT2: –
When I use validation annotations (@ notnull, @ size, etc.) directly in the entity class, @ valid annotations in the controller work, but if I delete them from my entity and try to use the validator written above, @ valid does not work
So @ valid annotation can only be used in entities, not with validators? In order to use my validator, I must call the validate method directly in my validator.
Solution
From what I understand, you are trying to combine JSR - 303 @ valid annotation with classic spring validation Why do you want to do this? The equivalent jsr-303 comment for the uservalidator class will be as follows:
@NotNull @Size(min=1) private String userName; @NotNull @Size(min=1) private String password ...
Spring documentation describes the steps required to configure JSR - 303 validation You need to use hibernate validator (or another JSR - 303 provider) to make the above functions work properly You also need to configure the validator bean as follows
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorfactorybean"/>
The other answers to this question are the same