gpt4 book ai didi

java - 如何获取ConstraintValidatorContext?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:45 25 4
gpt4 key购买 nike

我正在编写对 Bean 验证 (JSR-303) 进行显式调用的代码,如下所示:

public class Example {

@DecimalMin(value = "0")
private static final String ANNOTATED = "";

public void isPossitiveNumber(String str){

ValidatorFactory factory =
Validation.buildDefaultValidatorFactory();

ConstraintValidator<DecimalMin, String>
validator =
factory.getConstraintValidatorFactory().getInstance(
DecimalMinValidatorForString.class);


validator.initialize(
ReflectionUtils.findField(getClass(), "ANNOTATED")
.getAnnotation(
DecimalMin.class));

boolean isValid = validator.isValid(str, null);

return isValid;


}


}

注意行 boolean isValid = validator.isValid(str, null);我为 ConstraintValidatorContext 传输了 null ,因为我找不到获取/构造它的方法。在这种特殊情况下,如果没问题,因为内部没有使用 ConstraintValidatorContext,但这显然是一个 hack。我应该如何获取 ConstraintValidatorContext

已添加

我被要求提供用例。因此,例如,我正在编写自定义 validator 并且我想重用现有的验证。或者我正在编写上面描述的平面 Java 代码,我想重用现有的验证。

最佳答案

我最近遇到了与 OP 完全相同的问题。然而,与公认的答案相反,可以编写包含 ConstraintValidationContext 的单元测试。这个优秀的链接解释了如何去做,http://farenda.com/java/bean-validation-unit-testing/

基本上您需要使用 ValidatorFactory 获取 Validator 接口(interface),然后在该接口(interface)上调用 validate(c),其中参数 c 是包含 bean 验证注释的类的实例。代码示例更清晰,代码示例取自上述链接。

   public class Player {

// name have to be 3 chars:
@Size(min = 3, max = 3)
private String name;

// possible score in game:
@Min(0) @Max(100)
private int score;

public Player(String name, int score) {
this.name = name;
this.score = score;
}

// just for logs
@Override
public String toString() {
return "Player{name='" + name + '\'' + ", score=" + score + '}';
}
}

public class PlayerValidationTest {
private static ValidatorFactory validatorFactory;
private static Validator validator;

@BeforeClass
public static void createValidator() {
validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
}

@AfterClass
public static void close() {
validatorFactory.close();
}

@Test
public void shouldDetectInvalidName() {
//given too short name:
Player player = new Player("a", 44);

//when:
Set<ConstraintViolation<Player>> violations
= validator.validate(player);

//then:
assertEquals(violations.size(), 1);
}

关于java - 如何获取ConstraintValidatorContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15409763/

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