我提出了一个使用JSR303组进行条件验证的概念。“有条件地”意味着我有一些字段,这些字段只有在另一个字段具有特定值时才相关。
示例:有一个选项可以选择是以个人身份注册还是以公司身份注册。选择公司时,用户必须填写包含公司名称的字段。
class RegisterForm
{
public interface BasicCheck {}
public interface UserCheck {}
public interface CompanyCheck {}
@NotNull(groups = BasicCheck.class)
private Boolean isCompany
@NotNull(groups = UserCheck.class)
private String firstName;
@NotNull(groups = UserCheck.class)
private String lastName;
@NotNull(groups = CompanyCheck.class)
private String companyName;
// getters / setters ...
}
@Autowired
SmartValidator validator;
public void onRequest(@ModelAttribute("registerForm") RegisterForm registerForm, BindingResult result)
{
validator.validate(registerForm, result, RegisterForm.BasicCheck.class);
if (result.hasErrors()
return;
// basic check successful => we can process fields which are covered by this check
if (registerForm.getIsCompany())
{
validator.validate(registerForm, result, RegisterForm.CompanyCheck.class)
}
else
{
validator.validate(registerForm, result, RegisterForm.UserCheck.class);
}
if (!result.hasErrors())
{
// process registration
}
}
但是Spring由于数据绑定而打破了这个想法。在验证开始之前,Spring将数据绑定到RegisterForm。例如,如果类型不兼容(应为int值,但用户用字母填充表单),则会向result
添加错误。这是一个问题,因为这些错误通过
标记显示在JSP-view中
现在我找到了一种方法,通过实现自定义的BindingErrorProcessor
来防止Spring将那些错误添加到绑定结果中。如果一个字段包含null
,我知道存在验证错误。在我的概念中,null
是不允许的-每个字段都使用@Notnull
加上相应的验证组进行注释。
由于我是Spring和JSR-303的新手,我想知道我是否完全走错了路。我必须自己实现一些事情的事实使我不确定。这是干净的解决方案吗?对于同样的问题,有没有更好的解决方案,因为我认为这是一个常见的问题?
您认为Spring MVC在这方面有点挑剔是正确的,这是一个常见的问题。但也有解决办法:
祝你好运!
本文向大家介绍springmvc使用JSR-303进行数据校验实例,包括了springmvc使用JSR-303进行数据校验实例的使用技巧和注意事项,需要的朋友参考一下 项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验。然而对于安全要求较高点建议在服务端进行校验。 服务端校验: 控制层controller:校验页面请求的参数的合法性。在服务端控制层co
我试图为我的模型类实现一个自定义验证器,该验证器依赖于我的自定义bean(通过声明)。在本文中,我遵循了有关该主题的Spring文档。我的对象是根据本教程实现的。 但是,在运行我的测试时,对象中的autowired属性总是。为什么会这样? 以下是我的代码的相关部分: 我的自定义bean, 我的自定义约束 存储库使用Spring Data JPA的
我的bean中有两个字段 当字段key=“A”,“value”应该跟在其他“key”的特定Regex后面时,它可以是任何内容。 如何根据键定义此值验证。
我们有一个带有JSR注释的简单bean 我们有一个Spring控制器 我们的问题是,当调用changePassword时,验证器忽略组(PasswordChange.Class)并只验证组中不存在的firstName和lastName。 知道吗?非常感谢你抽出时间。
我按照文档(http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/validation.html)中给出的内容配置了JSR-303自定义验证器,在类路径上使用LocalValidatorFactoryBean和Hibernate验证器完成。但是,我的验证器只是拒绝启动。我在这里(https://github.
我使用Spring 3.2.2与Primeface 4.0和Hibernate 4.2。我在我的实体上有JSR303验证注释,并且我配置了Spring来在服务层验证它们——这很好。 但是我希望在调用服务之前启动JSF验证,但事实并非如此。我所做的所有研究都表明,我只需在类路径中添加一个验证程序,JSF2就会自动应用。 我已将建议的JAR添加到我的类路径中: 完整的依赖关系树可以在https://g