我在为我的Rest控制器使用可选参数,以区分要调用的方法:
@GetMapping("/cars")
@ResponseBody
public List<CarsDTO> getAllCarsByCat(@RequestParam Optional<Integer> cat1,
@RequestParam Optional<Integer> cat2) {
if (cat1.isPresent() && cat2.isPresent())
return carsService.getAllCarsByCat1AndCat2(cat1.get(), cat2.get());
else if (cat1.isPresent())
return carsService.getAllCarsByCat1(cat1.get());
else if (cat2.isPresent())
return carsService.getAllCarsByCat2(cat2.get());
else
return carsService.getAllCars();
}
为什么下面的线程的最高表决响应提议“使用导致方法内部的条件逻辑的可选参数实际上会产生相反的结果。”]]
Why should Java 8's Optional not be used in arguments
我正是这样做的,并认为它是最易读和直接的解决方案。这种方法有什么不好?
我正在为我的Rest控制器使用可选参数,以区分要调用的方法:@GetMapping(“ / cars”)@ResponseBody公共列表
使用Optional
作为@RequestParam
的唯一问题是性能,并使用Optional.OfNullable
创建可选包装,并使用Optional.get()
展开包装或使用Optional.ifPresent()
检查。从功能的角度来看,使用Optional
总是看起来不错,但是作为一个好的程序员,这是不必要的包装和展开附加操作。在春季Optional
中允许@RequestParam将参数声明为可选