请求参数的存在应评估为 true

问题描述 投票:0回答:3

假设我有一个接受请求的端点,如下所示:

GET https://my.website.com/products?expired

GET https://my.website.com/products

我希望有效的方法:

@GetMapping
public List<Product> products(@RequestParam(value = "expired", required=false) boolean expired) {
   //Implementation details
}

但是,这将返回错误请求

400
响应。

我知道我可以通过将

expired
requestParam 发送为
expired=true
来使其工作,但我希望它的工作方式类似于 HTML 布尔属性,其中仅存在请求参数就代表
true
和它的缺席代表
false

java spring http spring-mvc
3个回答
4
投票

使用

Boolean
而不是
boolean
- 您遇到的问题是您试图将
null
值拆箱到原语
boolean
,该操作会导致
NullpointerException
以及进一步的错误请求
400
响应

public List<Product> products(@RequestParam(value = "expired", required=false) Boolean expired)

在这里您可以阅读有关布尔值拆箱的更多内容


1
投票

我想知道您是否必须实现两种方法,一种有参数,一种没有参数,第二种需要它(并且可能

Boolean
非原始的,正如另一个答案所暗示的那样)。

(然后只需调用两者的通用方法即可。)


0
投票

您可以将其定义如下:

@GetMapping
public List<Product> products(@RequestParam MultiValueMap<String, String> params) {
   boolean expired = params.containsKey("expired");
   //Implementation details
}

参见底部的示例https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/requestparam.html

© www.soinside.com 2019 - 2024. All rights reserved.