自定义注释处理的要求?

时间:2015-09-02 19:09:55

标签: java validation annotations

考虑一个基本的Java程序,其目标是创建一个自定义参数验证注释。

此代码的大多数其他示例都关注它在Spring或Hibernate中的用法,但是这在普通的Java程序中是否可行?下面的示例代码根本不会调用自定义注释。 MinLengthValidator内的断点不会被击中。

javax.validation:validation-api:1.1.0.Final jar在类路径上,就像org.hibernate:hibernate-validator:5.2.1.Final FWIW,但我认为这只是必要的使用内置的bean验证注释,而不是自定义注释。

在Eclipse中,我已经通过Java编译器设置启用了注释处理,并且包含了一个实现AbstractProcessor的类,标有@SupportedAnnotationTypes("com.example.MinLength"),但其process方法没有&#39}。似乎也被调用了。

还需要什么?编译器标志,JVM选项?在"普通香草"中是否存在使用验证注释API的规范参考? Java项目?

=====

public static void main(String[] args) {
    printLongMessage("hello today is Wednesday");
}

public static void printLongMessage(@MinLength(5) String message) {
    System.out.println(message);
}

@MinLength验证由以下两个类提供:

MinLength.java:

package com.example;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target( { PARAMETER, ANNOTATION_TYPE } )
@Retention(RUNTIME)
@Constraint(validatedBy = MinLengthValidator.class)
public @interface MinLength {

    String message() default "String is shorter than allowed minimum length.";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    int value();
}

MinLengthValidator.java:

package com.example;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MinLengthValidator implements ConstraintValidator<MinLength, String> {

    private int minLength;

    @Override
    public void initialize(MinLength constraintAnnotation) {
        minLength = constraintAnnotation.value();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value.length() >= minLength;
    }
}

0 个答案:

没有答案