Hibernate Validator:未评估方法约束
Hibernate Validator: Method constraints not evaluated
我有一个简单的 class,我想验证一下:
public class Model {
@NotNull
private String someField;
@AssertTrue
public boolean methodConstraint() { ... }
}
此 class 作为 spring 控制器方法输入的一部分得到验证。
我设法配置了字段的验证(在本例中为 someField
),但由于某种原因甚至没有调用 methodConstraint()
,更不用说验证了。我记得这是可能的。
我使用默认的Spring boot 2.6.6配置进行验证,这意味着我使用6.2.3版本的hibernate验证器,2.0.2 API版本。
我怀疑这是 ValidatorImpl:454
事情发展的方向,因为此方法仅验证(直接)元约束,但方法约束似乎并未被视为此类约束。
假设你有类似的东西
@Controller
class ModelController {
...
public Result mappedMethod(@Valid Model model) {
...
}
}
然后模型将被验证为 JavaBean。意味着只会考虑字段和吸气剂。
如果模型class修改为:
public class Model {
@NotNull
private String someField;
@AssertTrue
public boolean isMethodConstraint() { ... }
}
受约束的方法开始遵循 JavaBean 要求(方法名称以 is/get
开头并且有 0 个参数)然后该方法将在验证期间执行。
或者,如果 bean 不遵循 JavaBean 格式,则可以使用自定义策略。请参阅文档 here。但如果可能的话——更新模型 classes 并使受约束的方法以 is/get
.
开头会更容易
我有一个简单的 class,我想验证一下:
public class Model {
@NotNull
private String someField;
@AssertTrue
public boolean methodConstraint() { ... }
}
此 class 作为 spring 控制器方法输入的一部分得到验证。
我设法配置了字段的验证(在本例中为 someField
),但由于某种原因甚至没有调用 methodConstraint()
,更不用说验证了。我记得这是可能的。
我使用默认的Spring boot 2.6.6配置进行验证,这意味着我使用6.2.3版本的hibernate验证器,2.0.2 API版本。
我怀疑这是 ValidatorImpl:454
事情发展的方向,因为此方法仅验证(直接)元约束,但方法约束似乎并未被视为此类约束。
假设你有类似的东西
@Controller
class ModelController {
...
public Result mappedMethod(@Valid Model model) {
...
}
}
然后模型将被验证为 JavaBean。意味着只会考虑字段和吸气剂。
如果模型class修改为:
public class Model {
@NotNull
private String someField;
@AssertTrue
public boolean isMethodConstraint() { ... }
}
受约束的方法开始遵循 JavaBean 要求(方法名称以 is/get
开头并且有 0 个参数)然后该方法将在验证期间执行。
或者,如果 bean 不遵循 JavaBean 格式,则可以使用自定义策略。请参阅文档 here。但如果可能的话——更新模型 classes 并使受约束的方法以 is/get
.