gpt4 book ai didi

java - 自定义 Bean 验证不起作用

转载 作者:行者123 更新时间:2023-11-30 07:28:26 26 4
gpt4 key购买 nike

我正在尝试创建自定义 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{};
}

我的验证工具

package validationtest;

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

public class NotEmptyImpl implements ConstraintValidator<NotEmpty, String> {

@Override
public void initialize(NotEmpty annotation) {
throw new RuntimeException("The field is not empty: " + annotation.message());
}

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
return !"".equals(value);
}

}

注意:我将包validation-api-1.1.0.Final.jar添加到类路径中。

最佳答案

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

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

然后需要初始化ValidatorFactory + Validator,并使用ExecutableValidator执行方法:

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

附注并在 NotEmptyImpl 中注释“抛出新...”

关于java - 自定义 Bean 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36504718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com