Spring是否可以按需运行验证?

时间:2018-07-02 12:12:47

标签: java spring

在Spring项目中,我遇到以下情况:我们有一堆用户表单,只需要根据需要对其进行验证。 例如,假设我有一个SomeUserData类

class SomeUserData {
   //@NotNull
   private String firstName;

   //@NotNull
   //@Min(18)
   //@Max(100)
   private Integer age;
}

我需要能够保存用户输入的所有数据,即使他将名称保留为空或将年龄设置为15而不产生任何警告。

但是当用户要求进行验证时,我确实需要通过验证来运行数据。

有人知道解决此问题的方法吗?如果我没有提供足够的详细信息,请告诉我。

3 个答案:

答案 0 :(得分:0)

为此,我建议使用不同的类:SomeUserData和SomeUserDataStrict。此外,您可以有不同的验证集,例如成熟度等级(例如美国电影定价协会的电影等级系统):SomeDataG,SomeDataPG,SomeDataPG13,SomeDataR,SomeDataNC17

答案 1 :(得分:0)

编写自定义验证器,例如,该验证器的validate方法具有可选的布尔参数,例如“ validateBusiness”。如果存在该参数并将其设置为TRUE,则执行验证,否则保存未经验证的实体。

答案 2 :(得分:0)

要有条件地验证您的类对象,可以在您的类中添加一个字段,例如说validateOnDemand布尔字段。

class SomeUserData {
   private String firstName;
   private Integer age;
   private boolean validateOnDemand;

}

然后在具有条件验证逻辑的方法上使用@AssertTrue

@AssertTrue
public boolean validateFirstNameOnDemand() {
   if(this.validateOnDemand){
      // your logic to validate/invalidate 
   }else{
     return true; // validate 
   }
}

如果上述方法返回true,则请求对象在返回false的情况下得到了其他验证,如果传入了AssertionException参数,它将抛出一条带有消息的@AssertTrue