如何在java中为restapi调用的queryparam设置可选值

4dbbbstv  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(753)

想知道如何将queryparam值设置为@queryparam的@optional。
尝试了以下操作

@QueryParam("x") int x

我想为x设置一个defaultvalue,并使其成为可选的。
我试过以下方法

@QueryParam("x") @DefaultValue("1") int x

但当我空进来的时候

http://localhost:8100/sort/values?x=

我的期望是得到x的值为1,因为我正在设置@defaultvalue(“1”)
但是我得到了下面的错误

Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException

因为@defaultvalue只接受string,我需要int数据类型
有没有一种方法可以设置defaultvalue并使其成为@queryparam的可选值我可以对requestheader执行此操作,但是当我需要对queryparam执行相同的实现时会遇到问题
请让我知道,如果我遗漏了什么或任何不同类型的实施。

unftdfkk

unftdfkk1#

如果按照标签建议使用spring,您可以尝试:

@RequestParam(required = false) String myParam
mmvthczy

mmvthczy2#

@DefaultValue 将在url中缺少查询参数时启动,如下所示。

http://localhost:8100/sort/values

由于请求参数“x”不带任何值,因此处理程序方法将该值作为x的空字符串(“”)接收,并尝试将其转换为整数(因为x是int),但最终由于该异常消息而失败。
如果您想处理空值,那么可以通过编程来完成。我们可以使用ApacheCommonsStringUtils库并将空字符串转换为1。

StringUtils.defaultIfEmpty(x, "1")
z6psavjg

z6psavjg3#

您可以使用@requestparam而不是@queryparam,因为它有一个可以设置为false的必需属性
例子:
公共字符串get(@requestparam(required=false)int x){}
或默认值:
公共字符串get(@requestparam(defaultvalue=1)int x){}

相关问题