gpt4 book ai didi

java - 如何为同一个@Constraint 实现多个JSR-303 验证消息?

转载 作者:搜寻专家 更新时间:2023-11-01 04:05:49 24 4
gpt4 key购买 nike

我正在对一个实体使用 JSR-303 验证 (hibernate-validator),并应用一些不同的规则。宁愿不为这些堆叠多个 @Constraint 注释,而是使用单个注释,例如@MyEntityConstraint

问题是确实需要为每种类型的验证失败提供不同的消息,但该消息似乎与注释密不可分:

public @interface MyEntityConstraint {
String message() default "A single, unchangeable message per constraint???";
// ...
}

有什么办法解决这个问题还是我注定要有:

@MyEntityConstraint1
@MyEntityConstraint2
// ...
@MyEntityConstraintn
@Entity
public class MyEntity {
// ...
}

最佳答案

正如 Hardy 所建议的,这可以使用 ConstraintValidatorContext 来完成。 - 如下:

@Override
public boolean isValid(MyEntity myEntity, ConstraintValidatorContext context) {
// Disable default ConstraintViolation so a customised message can be set instead.
context.disableDefaultConstraintViolation();

return checkConstraint1(myEntity, context)
&& checkConstraint2(myEntity, context)
//...
&& checkConstraintn(myEntity, context);
}

// Note: A private method for each constraint decreases the cyclomatic complexity.
private boolean checkConstraint1(MyEntity myEntity, ConstraintValidatorContext context) {
// Default validity is true until proven otherwise.
boolean valid = true;

if (/*<<Insert constraint #1 conditions (about myEntity) here>>*/) {
valid = false;
context.buildConstraintViolationWithTemplate(
"<<Insert constraint #1 failure message here>>").addConstraintViolation();
}

return valid;
}

关于java - 如何为同一个@Constraint 实现多个JSR-303 验证消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805669/

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