@NotNull注解在Java Jersey中未按预期工作

7

我有一个端点实现,我在参数列表中传递了一个对象。我正在尝试使用@NotNull注释来验证此对象不为空。

@POST 
@Path("path") 
public Response endpointMethod(@NotNull @ApiParam(value = "abc", required = true) Object object) { 
        return Response.status(Status.OK).build(); 
} 

如果对象已经验证不为空,则终端只会返回200 OK响应。但是,当我通过指定的路径发出请求时,并且正文中没有任何内容,没有抛出任何错误。相反,我能够检索到200响应(即使在返回响应之前检查对象是否为空,它也显示为空)。
有人能指导我如何以正确的方式验证对象是否为空吗?

1
你使用的是哪个注解?是来自 javax.validation.constraints 包中的那一个吗? - Cosu
@Cosu 是的,那就是这个包。 - Adam
2个回答

10
如果您的类路径中有bean-validation依赖项(org.glassfish.jersey.ext:jersey-bean-validation:2.22.2),框架应该会自动获取并直接工作。
此外,请确保您的@NotNull注释来自javax.validation.constraints包。

1
谢谢!添加 jersey-bean-validation 依赖解决了这个问题。 - Adam
@CandleCoder,你能分享一下最小的设置吗?因为这个方法没有起作用? - Łukasz
1
通过将jersey-bean-validation依赖项添加到我的pom.xml中,然后在我的模型中使用@NotNull@POST资源处理程序的方法参数上的@Valid相结合,这对我很有效。 - Ethan Hohensee

1

我不确定@ApiParam(来自swagger?),但是以下内容适用于我使用的Jersey 2.22:

@GET
@Path("/hz-test")
public Response proc(
            @NotNull @QueryParam("hz") String myvalue) {

我还怀疑你需要在其他Jersey参数注释(例如@QueryParam,@HeaderParam等)中使用@NotNull。顺便问一下,你使用的是什么版本的jersey?(据我所知,@NotNull仅受支持> 2.x)

对我来说并没有完全奏效。但是还是谢谢你的帮助。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接