如何在spring中为验证进行自定义注释

时间:2013-08-26 11:16:03

标签: spring-mvc

我必须对不同的阶段进行不同的验证。 例如:我有一个具有这些属性的学生班 公立班学生{ 整数id, 整数rollNumber; 字符串名称; 整数年龄, String fathersName, String mothersName }

我必须在不同条件下保存到数据库之前验证对象: 1.如果保存是草案阶段,那么只有id和rollnumber应该是强制性的, 2.如果保存是提交阶段,那么所有字段都必须是强制性的。

有没有办法编写注释,我可以根据注释使用@draft和@submit来定义这些验证。例如@valid(type = draft)

1 个答案:

答案 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之前用于执行任何初始化的方法。

尝试一下,如果您仍然需要自定义问题的帮助,请告诉我我可能有时间为您编写。