是否可以访问字段值,该字段名在注释中描述,该注释在类中注释了另一个字段。
例如:
@Entity
public class User {
@NotBlank
private String password;
@Match(field = "password")
private String passwordConfirmation;
}
注解:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface Match {
String message() default "{}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String field();
}
现在,是否可以从ConstraintValidator实现类中的User类访问字段密码?
编辑:
我写了这样的东西:
public class MatchValidator implements ConstraintValidator<Match, Object> {
private String mainField;
private String secondField;
private Class clazz;
@Override
public void initialize(final Match match) {
clazz = User.class;
final Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Match.class)) {
mainField = field.getName();
}
}
secondField = match.field();
}
@Override
public boolean isValid(final Object value, final ConstraintValidatorContext constraintValidatorContext) {
try {
Object o; //Now how to get the User entity instance?
final Object firstObj = BeanUtils.getProperty(o, mainField);
final Object secondObj = BeanUtils.getProperty(o, secondField);
return firstObj == null && secondObj == null || firstObj != null && firstObj.equals(secondObj);
} catch (final Exception ignore) {
ignore.printStackTrace();
}
return true;
}
}
现在的问题是如何获取用户对象实例并比较字段值?
您或者需要编写一个类级别的约束,以便在其中将完整的 User 实例传递给
isValid 调用,或者可以使用类似
@ScriptAssert的
东西。
目前,作为“常规”字段验证的一部分,无法访问根bean实例。BVAL问题-BVAL-237-讨论了添加此功能的问题,但到目前为止,它还不是Bean验证规范的一部分。
注意,有很多原因导致无法访问atm的根bean。对于 validateValue 情况,依赖于根bean可以访问的约束将失败。
是否可以访问一个字段值,其中字段名在批注中描述,批注类中的另一个字段。 例如: 注释: 我写了这样的东西: 现在的问题是如何获取用户对象实例并比较字段值?
问题内容: 但是我想知道哪个更好?通过属性访问还是通过字段访问?每种都有哪些优点和缺点? 问题答案: 我更喜欢访问器,因为我可以在需要时向访问器添加一些业务逻辑。这是一个例子: 此外,如果您将其他库(例如一些基于JSON转换的库,BeanMapper或Dozer或其他基于getter / setter属性的Bean映射/克隆库)添加到混合库中,则可以确保该库与持久性同步经理(都使用getter /
问题内容: 我有一个像这样的对象: 现在,当我尝试访问键“ 0”的值时,例如: …我遇到了错误。(也许这不是正确的方法吗?) 如何访问数字键的值(如上)? 问题答案: 这应该工作: (是的替代语法。) 您会收到此错误,因为在JavaScript中,标识符不能以数字开头。 JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript
问题内容: 这个问题与Hibernate Annotation PlacementQuestion有关。 但是我想知道哪个 更好 ?通过属性访问还是通过字段访问?每种都有哪些优点和缺点? 问题答案: 我更喜欢访问器,因为我可以在需要时向访问器添加一些业务逻辑。这是一个例子: 此外,如果您将其他库(例如一些基于JSON转换的库,BeanMapper或Dozer或其他基于getter/setter属性
概述 JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。 下面是属性描述对象的一个例子。 { value: 123, writable: false, enumerable: true,
我有一个字段有更大的描述。 在swagger-ui页面中,描述是内联的。在对模型进行文档化时,有什么方法可以让“\n”起作用吗?