假设我有一个接受请求的端点,如下所示:
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
使用
Boolean
而不是 boolean
- 您遇到的问题是您试图将 null
值拆箱到原语 boolean
,该操作会导致 NullpointerException
以及进一步的错误请求 400
响应
public List<Product> products(@RequestParam(value = "expired", required=false) Boolean expired)
我想知道您是否必须实现两种方法,一种有参数,一种没有参数,第二种需要它(并且可能
Boolean
非原始的,正如另一个答案所暗示的那样)。
(然后只需调用两者的通用方法即可。)
您可以将其定义如下:
@GetMapping
public List<Product> products(@RequestParam MultiValueMap<String, String> params) {
boolean expired = params.containsKey("expired");
//Implementation details
}