首页 > 解决方案 > Spring中2个请求参数的自定义验证

问题描述

有没有办法自定义验证进入 Spring 端点的 2 个请求参数?我希望能够使用我的自定义函数来验证它们。诸如在请求参数或这些参数所在的函数上添加注释并强制这些参数由另一个自定义编写的函数验证。
我需要同时获取两个参数,因为一个参数的验证输出取决于另一个参数的值。
我已经搜索并找到了一些带有自定义约束注释的解决方案,但从我所阅读的内容来看,它似乎并没有解决我的问题。

标签: javaspringspring-bootvalidationkotlin

解决方案


正如正确提到的,使用valiktor是最好的选择。我也在我们的产品中使用过它,它就像一个魅力。

下面是一个片段示例,说明如何使用它来比较同一类的两个属性。

fun isValid(myObj: Myobj): Boolean {
    validate(myObj) {
    validate(MyObj::prop1).isGreaterThanOrEqualTo(myobj.prop2)
}

如果验证失败,Valiktor 会抛出带有正确消息的异常。如果您愿意,它还使您能够创建自定义异常消息。

现在您需要做的就是为您的 requestBody 创建一个类并使用 isValid() 方法显式检查您的条件,或者将其移至 init 块并隐式执行。

与 JSR380相比,Valiktor 具有大量验证,与Valiktor相比,创建自定义验证有点混乱。


推荐阅读