我正在尝试为局部变量创建一个自定义注释,它与@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
值并使用空字符串并尝试不传入它,但注释不会触发,验证器也不会触发。我在这里做错了什么?
答案 0 :(得分:0)
确保将其部署为Web应用程序。就我而言,它不是针对测试用例触发的,而是在实际的Web应用程序中触发的。