Spring MVC Custom Validator Example
来源:互联网 发布:淘宝店铺详情页设计 编辑:程序博客网 时间:2024/05/21 02:33
In spring mvc form submit tutorial, we learned about displaying a form and submitting form data, including validating inputs using BindingResult.rejectValue()
. In this example, we will learn to build a more robust validator for EmployeeVO
model object. This validator is custom implementation of Validator
interface. In this example, I am modifying the code used for form submit example we built in last tutorial.
Custom Validator Implementation
Spring MVC supports validation by means of a validator object that implements the Validator
interface. You can write the following validator to check if the required form fields are filled.
package com.howtodoinjava.demo.validator;import org.springframework.stereotype.Component;import org.springframework.validation.Errors;import org.springframework.validation.ValidationUtils;import org.springframework.validation.Validator;import com.howtodoinjava.demo.model.EmployeeVO;@Componentpublic class EmployeeValidator implements Validator{ public boolean supports(Class clazz) { return EmployeeVO.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "error.firstName", "First name is required."); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "error.lastName", "Last name is required."); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "error.email", "Email is required."); }}
In this validator, you use utility methods such as rejectIfEmptyOrWhitespace()
and rejectIfEmpty()
in the ValidationUtils
class to validate the required form fields. If any of these form fields is empty, these methods will create a field error and bind it to the field. The second argument of these methods is the property name, while the third and fourth are the error code and default error message.
Many times validation errors are not specific to fields. For example end date should be greater than start date. In this case, you can use the reject()
method to create an object error to be bound to the EmployeeVO
object, not to a field.
e.g. errors.reject(“invalid.dateDiff”, “End date should be greater than start date.”);
To activate this custom validator as a spring managed bean, you need to do one of following things:
1) Add @Component
annotation to EmployeeValidator
class and activate annotation scanning on the package containing such declarations.
<context:component-scan base-package="com.howtodoinjava.demo" />
2) Alternatively, you can register the validator class bean directly in context file.
<bean id="employeeValidator" class="com.howtodoinjava.demo.validator.EmployeeValidator" />
Controller Changes
To apply this validator, you need to perform the following modification to your controller.
1) Include validator reference to controller class and mark it autowired to ensure it’s available when needed.
@AutowiredEmployeeValidator validator;
2) Next change is in controller’s post method which is called when user submit the form.
@RequestMapping(method = RequestMethod.POST)public String submitForm(@ModelAttribute("employee") EmployeeVO employeeVO, BindingResult result, SessionStatus status){ //Validation code validator.validate(employeeVO, result); //Check validation errors if (result.hasErrors()) { return "addEmployee"; } //Store the employee information in database //manager.createNewRecord(employeeVO); //Mark Session Complete status.setComplete(); return "redirect:addNew/success";}
Once the validate method returns, the result parameter i.e. BindingResult
contains the results for the validation process. You can check if there was any error in input using result.hasErrors()
method call. If any error is detected you can again render the form view to let user correct it’s input.
If there is no error found then result.hasErrors()
will return false, then you can simply process the input and redirect the user to next view.
Complete sourcecode foe controller used in this example is below:
package com.howtodoinjava.demo.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.SessionAttributes;import org.springframework.web.bind.support.SessionStatus;import com.howtodoinjava.demo.model.EmployeeVO;import com.howtodoinjava.demo.service.EmployeeManager;import com.howtodoinjava.demo.validator.EmployeeValidator;@Controller@RequestMapping("/employee-module/addNew")@SessionAttributes("employee")public class EmployeeController{ @Autowired EmployeeManager manager; @Autowired EmployeeValidator validator; @RequestMapping(method = RequestMethod.GET) public String setupForm(Model model) { EmployeeVO employeeVO = new EmployeeVO(); model.addAttribute("employee", employeeVO); return "addEmployee"; } @RequestMapping(method = RequestMethod.POST) public String submitForm(@ModelAttribute("employee") EmployeeVO employeeVO, BindingResult result, SessionStatus status) { validator.validate(employeeVO, result); if (result.hasErrors()) { return "addEmployee"; } //Store the employee information in database //manager.createNewRecord(employeeVO); //Mark Session Complete status.setComplete(); return "redirect:addNew/success"; } @RequestMapping(value = "/success", method = RequestMethod.GET) public String success(Model model) { return "addSuccess"; }}
- Spring MVC Custom Validator Example
- Spring MVC Form Validation Example using Annotation and Custom Validator implementation
- Spring Validation Example – Spring MVC Form Validator
- Spring Validation Example – Spring MVC Form Validator
- Spring MVC 自定义Validator
- Spring MVC - DispatcherServlet Example
- Spring MVC Model Example
- Spring MVC MultiActionController example
- Spring MVC PropertiesMethodNameResolver example
- Spring MVC ParameterMethodNameResolver example
- Spring MVC ParameterMethodNameResolver example
- Spring MVC ParameterizableViewController example
- Spring MVC InternalResourceViewResolver example
- Spring MVC XmlViewResolver example
- Spring MVC ResourceBundleViewResolver example
- Spring MVC BeanNameUrlHandlerMapping example
- Spring MVC ControllerClassNameHandlerMapping example
- Spring MVC SimpleUrlHandlerMapping example
- iOS_UI_5_user-defined(自定义)View
- Knockout应用开发指南 第三章:绑定语法(2)
- 我与一只流浪猫的相遇
- singleTask 和singleInstance差异
- objc利用block实现链式编程方法
- Spring MVC Custom Validator Example
- NoSql——redis(高级操作)
- Linux编程基础——Socket编程
- Knockout应用开发指南 第三章:绑定语法(3)
- rabbitmq在高可用HA方面的方案总结
- hadoop是什么
- “#ifdef __cplusplus extern "C" { #endif”的定义
- E-RAB
- 网页设计规范