Java Spring@Validated和@InitBinder
我正在尝试使用Spring验证器验证我的表单,使用Java Spring@Validated和@InitBinder,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我正在尝试使用Spring验证器验证我的表单,使用@Validated 但是,我不明白为什么需要在@InitBinder中指定验证器 以下是控制器中的相关代码片段: @InitBinder("organisationForm") private void initBinder(WebDataBinder binder) { binder.setValidator(new OrganisationFormValidator()); } @RequestMapping(value = "/
@Validated
但是,我不明白为什么需要在@InitBinder
中指定验证器
以下是控制器中的相关代码片段:
@InitBinder("organisationForm")
private void initBinder(WebDataBinder binder) {
binder.setValidator(new OrganisationFormValidator());
}
@RequestMapping(value = "/addOrganisation", method = RequestMethod.POST)
public String addOrganisationPost(@Validated @ModelAttribute("organisationForm") OrganisationForm organisationForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "configuration/addOrganisation";
}
这很好,但我需要为每个请求指定一个@InitBinder
Spring有一种注册所有转换器的方法,如下所示:
@Override
public void addFormatters(FormatterRegistry formatterRegistry) {
ConversionServiceFactory.registerConverters(getConverters(),
formatterRegistry);
}
Spring中是否有一个“验证服务”可以检查所有的验证器并选择正确的验证器,可能使用Spring验证器接口强制执行的supports
方法:
public boolean supports(final Class<?> clazz) {
return OrganisationForm.class.isAssignableFrom(clazz);
}
公共布尔支持(最终类clazz){
返回组织形式。类别。可签名自(clazz);
}
看起来很奇怪,春天不存在这种情况。我误解了什么吗?您可以使用它将验证器添加到init绑定中,并可以指定模型属性和ExceptionHandler
如果要在整个控制器(或特定的控制器列表)中使用验证程序,可以使用其属性为其指定控制器类
@ControllerAdvice(assignableTypes = { Controller1.class, Controller2.class})
很好的解决方案,但它仍然需要我将验证器专门绑定到每个活页夹,如@InitBinder(“OrganizationForm”)
。是否真的没有办法注册所有验证器并让@验证
使用验证器
支持
方法找到正确的验证器?@Geditdk如果不想绑定验证器,可以使用jsr 303
验证框架。由hibernate
和spring
提供的实现不使用验证框架似乎很奇怪。@zeroflagL我使用的是抱歉,我的评论措词不当。我指的是类似于豆子验证的东西。这对我来说容易多了。