Spring MVC:表单验证的集中处理

时间:2019-03-20 19:51:57

标签: java spring validation model-view-controller

我有一个具有许多数据输入屏幕的应用程序,因此有许多控制器类接受各种形式的POST数据。表单使用javax验证批注,并且控制器正在使用BindingResult来检查错误。一些表单使用自定义验证器(实现Springs ValidationUtils)来进行更多验证。

我现在正在尝试使用@ControllerAdvice方法将表单验证(以删除每个控制器中重复的验证代码)集中到一个单独的类中,并从控制器方法的参数中删除BindingResult。删除Binding结果将引发ControllerAdvice类捕获的错误。

除了以下事实外,这一切都很好,除了在ControllerAdvice类的BindingResult中仅存在@ Max,@ Min之类的基本注释,而没有来自自定义验证器的更复杂的验证。

是否可以将自定义验证错误导入ControllerAdvice类?您还采取了哪些其他方法来集中表单验证处理?

谢谢!

下面的代码:

EmployeeController.java

@RequestMapping(value = "/save", method = RequestMethod.POST)
public @ResponseBody String save(@Valid @RequestBody EmployeeForm form, 
HttpServletRequest request) 
{

}

EmployeeFormValidator.java

@Component
public class EmployeeFormValidator implements Validator {

    @Override
    public boolean supports(Class clazz) {
        return EmployeeFormValidator.class.equals(clazz);
    }

    @Override
    public void validate(Object obj, Errors e) 
    {
        EmployeeFormValidator form = (EmployeeFormValidator) obj;

        e.reject("firstName", "Please populate the employee's first name field.");


    }

}

ExceptionControllerAdvice.java

@ControllerAdvice
public class ExceptionControllerAdvice {


    @ExceptionHandler(MethodArgumentNotValidException.class)
    public @ResponseBody String handleException(MethodArgumentNotValidException ex, HttpServletRequest request) {

        if(ex.getBindingResult() != null) {
            BindingResult bindingResult = ex.getBindingResult();

            return "Binding errors found.";

        }else {

            return "No binding errors found.";
        }

    }

0 个答案:

没有答案