我必须对不同的阶段进行不同的验证。 例如:我有一个具有这些属性的学生班 公立班学生{ 整数id, 整数rollNumber; 字符串名称; 整数年龄, String fathersName, String mothersName }
我必须在不同条件下保存到数据库之前验证对象: 1.如果保存是草案阶段,那么只有id和rollnumber应该是强制性的, 2.如果保存是提交阶段,那么所有字段都必须是强制性的。
有没有办法编写注释,我可以根据注释使用@draft和@submit来定义这些验证。例如@valid(type = draft)
答案 0 :(得分:1)
这里你去..这不是很难......我将与你分享验证字符串是否为有效IP地址的代码:
您需要为验证器编写注释,并且需要编写具体的Validator实现:
以下是验证器的注释类,您可以在要验证的特定字段上使用该注释类:
@Target({ FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = InetAddressValidator.class)
@Documented
public @interface ValidIP {
String message() default "{ValidIP.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
现在你需要编写一个具体的验证器实现,如下所示:
public class InetAddressValidator implements ConstraintValidator<ValidIP, String> {
private static final Pattern IPV4_PATTERN =
Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.");
public boolean isValid(String value, ConstraintValidatorContext context) {
if (!(CommonUtility.isNullOrEmpty(value) || IPV4_PATTERN.matcher(value).matches()))
{
return false;
}
return true;
}
public void initialize(ValidIP parameters) {
}
}
您可以在以下字段中包含此注释:
@ValidIP(message = "Enter a valid IP address")
private String ip;
当spring尝试将表单参数映射到bean时,不会在绑定时工作。
只是指出这一点,isValid方法是一个需要逻辑来检查有效性的方法。
initialize方法是在调用isValid之前用于执行任何初始化的方法。
尝试一下,如果您仍然需要自定义问题的帮助,请告诉我我可能有时间为您编写。