【问题标题】:Hibernate Custom Annotation for Local Variables局部变量的 Hibernate 自定义注解
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2013-04-29
      • 2013-04-24
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多