如何将值设置为可选的 QueryParam 以在 java 中调用 rest api

Posted

技术标签:

【中文标题】如何将值设置为可选的 QueryParam 以在 java 中调用 rest api【英文标题】:How to set values as optional for QueryParam for rest api call in java 【发布时间】:2021-04-29 10:42:02 【问题描述】:

想知道如何将 queryParam 值设置为 @QueryParam 的 @Optional。

尝试了以下

@QueryParam("x") int x

我想为 x 设置一个默认值并将其设为可选。

我尝试了以下方法

@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 并将其设置为 @QueryParamoptional 我可以为 RequestHeader 执行此操作 但是当我想要 QueryParam

的相同实现时遇到问题

如果我遗漏任何内容或任何不同类型的实现,请告诉我。

【问题讨论】:

【参考方案1】:

您可以使用@RequestParam 代替@QueryParam 它有一个必需的属性,您可以将其设置为 false

例子:

公共字符串获取(@RequestParam(required = false) int x)

或默认:

公共字符串获取(@RequestParam(defaultValue = 1) int x)

【讨论】:

【参考方案2】:

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

http://localhost:8100/sort/values

由于请求参数 'x' 没有任何值,处理程序方法将值作为 x 的空字符串 ("") 接收并尝试将其转换为整数(因为 x 是 int),但最终失败并显示该异常消息.

如果您想处理空值,则可以通过编程方式完成。我们可以使用 apache commons StringUtils 库,将空字符串转换为 1。

StringUtils.defaultIfEmpty(x, "1")

【讨论】:

1.如果没有在 url 中传递 x,它会失败并出现以下错误 ```作为原始类型。考虑将其声明为相应原始类型的对象包装器。\n\tat org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.handleNullValue(AbstractNamedValueMethodArgumentResolver.java:245) ``` 2. 是的,我想使用 StringUtils 进行转换,但是它在 rest 层 本身失败了。有什么想法吗? 使用包装类型 Integer 而不是原始类型 (int)【参考方案3】:

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

@RequestParam(required = false) String myParam

【讨论】:

我必须使用 QueryParam,而不是 RequestParam。 对不起,我的错。所以,@DefaultValue 没用?我相信必须在@QueryParam 之前工作。

以上是关于如何将值设置为可选的 QueryParam 以在 java 中调用 rest api的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular2中将输入设置器指定为可选?

如何使用 BooleanBuilder (QueryDSL) 为可选的 OnetoOne JPA/Hibernate 关系建模谓词?

为可选的弹性项目分配空间[重复]

excel 设置 单元格的值为可选值,可选值设置为某一列。

Swift 模型属性

swift 可选项(Optional)