gpt4 book ai didi

java - 约束验证顺序 - Jersey

转载 作者:行者123 更新时间:2023-12-02 04:32:23 24 4
gpt4 key购买 nike

我正在使用 Jersey 2.19 来实现 REST API。

我已使用内置约束和用户定义的约束注释了我的资源。

@Path("myPath")
public class MyResource
{
@NotEmpty
@AssertBoolean
@FormParam("my-param")
private String m_myParam;

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes("application/x-www-form-urlencoded")
public Response test(String body) throws Exception
{
...
}
}

我的用户定义约束 @AssertBoolean 检查参数的值是否为 truefalse

当我提交 POST 请求而不为 my-param 提供值时,我在 @AssertBoolean 的 validator 中收到异常,因为参数值为null。这意味着它在 @NotEmpty 之前验证 @AssertBoolean

我可以强制执行验证订单吗?或者我必须在 validator 中检查 null 吗?

最佳答案

这实际上是一个关于 Bean Validation 约束顺序的问题,因为 JAX-RS 依赖于 Bean Validation 规范,而 Jersey 依赖于 hibernate-validator 提供的实现。

要按顺序评估约束注释,需要 java.lang.reflect.Field 允许按声明顺序检索注释。实际行为似乎是not reliable .

那就看看这个stackoverflow answer :它指出目前不支持 bean 验证约束的显式排序,并链接到允许这样做的提案。

另一点需要考虑的是,当单个约束失败时,bean 验证不会停止,因为它允许累积来自不同约束的错误消息。

因此,要解决您的问题,只需在 AssertBoolean 实现中加入 null 检查即可。

关于java - 约束验证顺序 - Jersey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31264544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com