Reflections.invokeMethod(Reflections.getFieldValue(attribute, clearField), "clear", null, null);
}
}
// 从绑定工厂获取绑定类
WebDataBinder binder = (ExtendedServletRequestDataBinder) binderFactory.createBinder(request, attribute, name);
if (binder.getTarget() != null) {
// 设置绑定允许的字段和禁止的字段
if (annot != null) {
String[] allowedFields = annot.allowedField();
String[] deniedFields = annot.deniedField();
binder.setAllowedFields(allowedFields);
binder.setDisallowedFields(deniedFields);
}
// 绑定request参数
bindRequestParameters(binder, request);
// 如果需要进行认证,见 @Valid注解
validateIfApplicable(binder, parameter);
if (binder.getBindingResult().hasErrors()) {
// 如果不紧跟Errors参数直接抛出异常
if (isBindExceptionRequired(binder, parameter)) {
throw new BindException(binder.getBindingResult());
}
}
}
// 将绑定结果和认证结果添加到model
Map<String, Object> bindingResultModel = binder.getBindingResult().getModel();
mavContainer.removeAttributes(bindingResultModel);
mavContainer.addAllAttributes(bindingResultModel);
return binder.getTarget();
}