2013-08-26 40 views
0

我必须把不同的验证了不同的阶段。 例如:我有一个具有这些属性的学生课 public class Student ID integer rollNumber; 字符串名称; 整数年龄, 字符串fathersName, 字符串mothersName }如何使验证定制注释春天

我在不同的条件数据库中保存之前验证对象: 1.如果保存为草稿阶段则仅标识和rollnumber应该是强制性的, 2.如果保存是用于提交阶段,则所有字段都应该是强制性的。

有没有什么方法可以写注释,我可以根据注释使用@draft和@submit来定义这些验证。例如@Valid(类型=草案)

回答

1

在这里你去。这是不是很艰难。我将分享你的代码来验证一个字符串是一个有效的IP地址:

你需要写为验证注解,你需要写一个具体的校验实现:

以下是你可以在特定领域使用验证器要验证注释类:

@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 {}; 

} 

现在,您需要写一个具体的验证器实现a S下:

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; 

不是这将绑定时间工作时,弹簧会尝试将表单参数映射到豆。

只要指出,isValid方法是需要有逻辑来检查有效性的方法。

initialize方法是在调用isValid之前用于执行任何初始化的方法。

试试这个,如果你仍然需要你的定制问题的帮助,让我知道我可能有一些时间为你写。

+0

不用客气 – dharam

+0

我需要验证控制器级别的对象。如同在控制器上一样,您可以编写用于验证对象的“@valid”注释。我想自定义“@Valid”注释SI,如果我给你“@Valid”中的控制器(类型=“草案”),那么它应该验证只卷号和ID,如果我给你“@Valid”(类型='保存'),那么它应该验证学生的属性。 – user1183194

+0

你会然后把一组草案(基本上是空的标记类调用草案)对所有的验证注解卷号和ID的验证注解,并且所有的组,使用支持团体春特定的验证注解验证 - @Validated(Draft.class) –