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

时间:2018-11-21 20:59:47

标签: java spring http spring-mvc

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

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

OR

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 boolean attributes的工作,其中仅存在请求param代表true,不存在则代表false

2 个答案:

答案 0 :(得分:4)

使用Boolean而不是boolean-您遇到的问题是,您试图将null的值取消装箱到原始boolean的值,该值会导致NullpointerException以及进一步的错误请求400响应

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

Here you can read something more about unboxing Boolean

答案 1 :(得分:0)

我想知道您是否必须实现两种方法,一种带有和不带有参数的方法,第二种需要它(可能是Boolean非原始的,如另一个答案所示)。

(然后只从这两者调用一个通用方法。)