【发布时间】:2016-07-29 02:10:26
【问题描述】:
我正在尝试为与@NotNull@NotEmpty 和@NotBlank 执行相同操作的局部变量创建自定义注释。我不能使用这些注释,因为它们不适用于局部变量,所以我决定制作自己的注释。这是注释:
import controllers.validation.validator.NotNullOrEmptyValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
@Target(LOCAL_VARIABLE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = NotNullOrEmptyValidator.class)
@ReportAsSingleViolation
public @interface NotNullOrEmpty {
String message() default "something is wrong!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target(LOCAL_VARIABLE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List {
NotNullOrEmpty[] value();
}
}
这是验证器:
import controllers.validation.constraints.NotNullOrEmpty;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class NotNullOrEmptyValidator implements ConstraintValidator<NotNullOrEmpty, Object> {
@Override
public void initialize(NotNullOrEmpty constraintAnnotation) {
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
return value!=null && !value.toString().isEmpty();
}
}
但由于某种原因,当我尝试这样使用它时:
public class Foo {
public void doSomething(HttpServletRequest request) {
@NotNullOrEmpty(message = "headerpiece cannot be empty or null.")
String headerPiece = request.get("something");
}
}
它只是不会触发。我尝试使用空字符串在标头中传递 something 值,并尝试根本不传递它,但注释不会触发,验证器也不会触发。我在这里做错了什么?
【问题讨论】:
标签: java spring hibernate annotations