我目前正在使用Spring进行所有验证,但是想要构建一个自定义注释,将单个字段上的一些条件组合在一起,有条件地验证其中一些条件并使用变量值,即某些内容。 :
public @interface CustomAnno
{
@NotNull
@Length(min = 1, max = 10, applyIf = "condition == 1")
@Length(min = 11, max = 20, applyIf = "condition == 2")
String val();
int condition();
}
我知道这在语法上并不正确,但希望能够解决我想要做的事情。
我的问题是,上述内容是否可能,并且单个CustomAnno注释是否能够为失败的所有条件返回错误,而不是仅返回CustomAnno的单个失败?
编辑:我可能不一定使用Spring注释来驱动值的验证。理想情况下,我将在处理CustomAnno的ConstraintValidator中使用任意验证逻辑,如果我的理解正确,则只会在isValid调用中返回true或false以查找一个可能的错误。我实际需要的是实现与上述相同功能的东西,但是使用来自验证器的注释或自定义逻辑,即:
public class CustomAnnoValidator implements ConstraintValidator<CustomAnno,String>
{
@NotNull
String val;
int cond;
String regex;
List<String> errors;
private void err(String msg)
{
errors.add(msg);
}
public void initialize(CustomAnno anno)
{
this.val = anno.val();
this.cond = anno.condition();
this.errors = new ArrayList<String>();
this.regex = "[A-Za-z]+[A-Za-z0-9]+";
}
public boolean isValid(String object, ConstraintValidatorContext constraintContext)
{
if (cond == 1)
{
if (object.length() > 10)
err("Length must be less than 10");
else if (object.length() < 1)
err("Length must be greater than 1");
}
else if (cond == 2)
{
if (object.length() > 21)
err("Length must be less than 21");
else if (object.length() < 10)
err("Length must be greater than 10");
}
if (!val.matches(regex))
err("Must start with an alpha character and consist of only alphanumeric characters.");
// some method to add the error messages, ie => constraintContext.addErrors(errors);
return errors.size() > 0;
}
}
我想理论上我可以为我缺少的任何单一条件创建自定义注释,可能会使这个问题变得清晰,但是想知道验证器是否有可能处理多个条件
答案 0 :(得分:0)
我不确定Spring注释的含义是什么意思? Spring MVC旨在与JSR-303一起使用,这是javax.validation jars描述的内容。
Spring MVC验证应该为每个失败的验证返回错误消息,即使这些验证在一个自定义注释中组合在一起。
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html