如何将值设置为可选的 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 并将其设置为 @QueryParam 的 optional 我可以为 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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 BooleanBuilder (QueryDSL) 为可选的 OnetoOne JPA/Hibernate 关系建模谓词?