我使用 Hibernate Validator 和 Spring 来在使用
CrudRepository::save
将对象插入存储库时验证对象。假设我们有课:
public class Person {
public int id;
@NotBlank(message="User with id: ${id} is missing name")
public String name;
}
我希望内插消息访问 Person 实例的所有字段,例如id 字段,然后像“${id}”或“${this.id}”一样访问它们。 文档提到了一些关于能够访问所有bean属性的内容,但我猜它只能与类级约束一起使用。
是否有某种方法可以在不诉诸类级约束的情况下做到这一点?
约束验证器无法访问字段本身之外的任何信息。因此,换句话说,没有办法访问同级字段。这与约束的范围有关。这样看:
@NotBlank
public String name;
非空白
name
可以是个人的字段,也可以是公司或其他班级的字段。 @NotBlank
它所在的位置没有区别。
因此,正如您在问题中所建议的那样,为了在插入消息时访问其他类字段,约束应该处于类级别...... 为了不创建大量自定义约束,您可以考虑查看
@ScriptAssert
。
另请注意,
ConstraintViolationException
包含一个ConstraintViolation
列表,从中您应该能够访问叶bean (getLeafBean()
)或根bean (getRootBean()
),并获取您想要的信息抛出异常后需要。