本地变量的Hibernate自定义注释

时间:2016-04-07 23:30:10

标签: java spring hibernate annotations

我正在尝试为局部变量创建一个自定义注释,它与@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值并使用空字符串并尝试不传入它,但注释不会触发,验证器也不会触发。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

确保将其部署为Web应用程序。就我而言,它不是针对测试用例触发的,而是在实际的Web应用程序中触发的。