Java 自定义bean验证不起作用

Java 自定义bean验证不起作用,java,bean-validation,Java,Bean Validation,我正在尝试创建一个自定义bean验证,但由于某些原因,它不起作用。谁能告诉我有什么问题吗 我的主要班级: package validationtest; import java.text.ParseException; public class Main { /** * @param args the command line arguments * @throws java.text.ParseException * @throws java.lan

我正在尝试创建一个自定义bean验证,但由于某些原因,它不起作用。谁能告诉我有什么问题吗

我的主要班级:

package validationtest;

import java.text.ParseException;

public class Main {

    /**
     * @param args the command line arguments
     * @throws java.text.ParseException
     * @throws java.lang.IllegalAccessException
     */
    public static void main(String[] args) throws ParseException, IllegalArgumentException, IllegalAccessException {
       Text msg = new Text();
       System.out.println(msg.getMessage(""));      
    }

}

class Text {
    public String getMessage(@NotEmpty(message = "Field message") String msg) {
        return msg;
    }
}
我的验证界面

package validationtest;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

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

@Documented
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotEmptyImpl.class)
public @interface NotEmpty {

    String message() default "";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default{};
}
包验证测试;
导入java.lang.annotation.Documented;
导入java.lang.annotation.ElementType;
导入java.lang.annotation.Retention;
导入java.lang.annotation.RetentionPolicy;
导入java.lang.annotation.Target;
导入javax.validation.Constraint;
导入javax.validation.Payload;
@记录
@目标({ElementType.PARAMETER})
@保留(RetentionPolicy.RUNTIME)
@约束(validatedBy=NotEmptyImpl.class)
public@interface NotEmpty{
字符串消息()默认为“”;
类[]组()默认值{};

类您需要添加bean验证的实现,例如-Hibernate Validator 5.0。Maven依赖项:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.0.Final</version>
</dependency>

另外,在NotEmptyImpl中注释“throw new…”您只安装了API?而不是impl?(例如Hibernate Validator)我将所有Hibernate JAR添加到类路径中:Hibernate-Validator-5.2.4。最后请注意Java注释只是“标记”:它们不会自动“运行”或者有行为。某些框架或工具需要阅读注释,然后执行适当的行为。在这种情况下,我认为您需要阅读一些关于Hibernate验证器的内容,以了解如何以编程方式执行验证器。感谢您的回答。在调用getMessage meth时,是否有方法检查字符串是否为空文本类的od?@omdombudsmanssolutions您可以检查方法内部,并在需要时抛出异常,而无需bean验证。谢谢,致以最良好的问候!
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.0.Final</version>
</dependency>
public static void main(String[] args) throws NoSuchMethodException {
    ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
    Validator validator = vf.getValidator();

    Text msg = new Text();

    String inParam = "";

    Method method = Text.class.getMethod("getMessage", String.class);
    ExecutableValidator methodValidator = validator. forExecutables();
    Set<ConstraintViolation<Text>> violations =
        methodValidator.validateParameters(msg, method, new Object[]{inParam});
    if (violations.size() > 0) {
        violations.forEach(v -> System.out.println(v.getMessage()));
    } else {
        //if ok - executing method
        msg.getMessage(inParam);
        //or if return value also need validation:
        //violations = methodValidator.validateReturnValue(msg, method, msg.getMessage(""));
        //violations.forEach(v -> System.out.println(v.getMessage()));
    }

    vf.close();
}
Field message