你可以在球衣上有一个可选的QueryParam吗?

Rol*_*ndo 8 java jersey

使用java jersey,我在我的方法处理程序中有以下@ QueryParam:

@Path("/hello")
handleTestRequest(@QueryParam String name, @QueryParam Integer age)
Run Code Online (Sandbox Code Playgroud)

我知道如果我这样做: http:// myaddress/hello?name = something

它会进入那种方法....

我想这样做,以便我可以打电话:

HTTP:// myaddress /你好名称=东西

它也将采用相同的方法.有什么办法可以标记一个"可选的"PathParam吗?它也适用于@FormParam吗?或者我是否需要使用不同的方法签名创建单独的方法?

小智 16

在JAX-RS中,参数不是必需的,因此如果您不提供年龄值,它将是NULL,并且您的方法仍将被调用.

您还可以使用@DefaultValue它在不存在时提供默认年龄值.

@PathParam参数和其他基于参数的注解,@MatrixParam,@HeaderParam,@CookieParam,并@FormParam遵守相同的规则@QueryParam.

参考

  • 看起来jersey 2.23在没有传递queryParameter的情况下默认返回404.那么它不完全遵循规范吗? (5认同)

rge*_*man 10

您应该能够@DefaultValueage参数中添加注释,以便在age未提供时,将使用默认值.

@Path("/hello")
handleTestRequest(
    @QueryParam("name") String name,
    @DefaultValue("-1") @QueryParam("age") Integer age)
Run Code Online (Sandbox Code Playgroud)

根据Javadocs的@DefaultValue说法,它应该适用于所有*Param注释.

定义使用以下注释之一绑定的请求元数据的默认值:PathParam,QueryParam,MatrixParam,CookieParam,FormParam或HeaderParam.如果请求中不存在相应的元数据,则使用默认值.