【发布时间】:2016-04-19 14:09:07
【问题描述】:
这是我创建用于验证名称的自定义注释的代码
有效名称.java
package custom.Annotation;
import java.lang.annotation.*;
import net.sf.oval.configuration.annotation.Constraint;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.LOCAL_VARIABLE)
@Constraint(checkWith=NameValidator.class)
public @interface ValidName {
String message() default NameValidator.message;
}
这是我的约束类代码
package custom.Annotation;
import net.sf.oval.Validator;
import net.sf.oval.configuration.annotation.AbstractAnnotationCheck;
import net.sf.oval.context.OValContext;
import net.sf.oval.exception.OValException;
import play.Logger;
import java.util.regex.Pattern;
public class NameValidator extends AbstractAnnotationCheck<ValidName>
{
public final static String message="custom.message";
private static final String letter = "[a-zA-Z]";
public static final Pattern VALID_PATTERN = Pattern.compile(letter);
public static boolean isValidText(String userName) {
return VALID_PATTERN.matcher(userName).matches();
}
@Override
public void configure(ValidName annotation) {
setMessage(annotation.message());
}
@Override
public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context,
Validator validator) throws OValException {
try
{
if (valueToValidate == null) {
return false;
}
}catch (Exception e){
e.getMessage();
}
return` isValidText(valueToValidate.toString()`);
}
}
当我将@ValidName 应用于任何局部变量时,什么也没发生
而且我也无法调试程序。有什么建议吗?
【问题讨论】:
-
为什么不实现自定义播放验证器? Here 是一个很好的入门答案。
-
抱歉没有提到我正在使用 play 1.4.1 所以 play.data.validation.Constraints 类在这里不可用
-
@adg Play 1.x 也有自定义验证。 playframework.com/documentation/1.4.x/validation#custom
标签: validation playframework annotations playframework-1.x oval