在 Hibernate Validator 中插入消息时如何访问实例变量?

问题描述 投票:0回答:1

我使用 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属性的内容,但我猜它只能与类级约束一起使用。

是否有某种方法可以在不诉诸类级约束的情况下做到这一点?

java spring hibernate hibernate-validator
1个回答
0
投票

约束验证器无法访问字段本身之外的任何信息。因此,换句话说,没有办法访问同级字段。这与约束的范围有关。这样看:

@NotBlank
public String name;

非空白

name
可以是个人的字段,也可以是公司或其他班级的字段。
@NotBlank
它所在的位置没有区别。

因此,正如您在问题中所建议的那样,为了在插入消息时访问其他类字段,约束应该处于类级别...... 为了不创建大量自定义约束,您可以考虑查看

@ScriptAssert

另请注意,

ConstraintViolationException
包含一个
ConstraintViolation
列表,从中您应该能够访问叶bean (
getLeafBean()
)或根bean (
getRootBean()
),并获取您想要的信息抛出异常后需要。

© www.soinside.com 2019 - 2024. All rights reserved.