Request Param的可选参数是不好的做法?

问题描述 投票:4回答:1

我在为我的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公共列表getAllCarsByCat(@RequestParam ...

java spring java-8 optional
1个回答
4
投票

Optional用作@RequestParam的唯一问题是性能,并使用Optional.OfNullable创建可选包装,并使用Optional.get()展开包装或使用Optional.ifPresent()进行检查。从功能的角度来看,使用Optional总是看起来不错,但是作为一个好的程序员,这是不必要的包装和展开附加操作。在春季Optional中允许@RequestParam将参数声明为可选

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