リクエストParamのためのオプションのパラメータは、悪い習慣ですか?

CoffeeCups:

私はコールにどの方法を区別するために、私の場合、私の残りのコントローラのオプションパラメータを使用しています:

@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();

}

なぜ、以下のスレッドの最高投票応答は、「メソッドの内部で条件ロジックを引き起こしてオプションのパラメータを使用すると、文字通りコントラ生産的である。」と提案しているのでしょうか?

なぜJavaの8のオプションの引数に使用すべきではありません

私が最も読みやすく、まっすぐ進むソリューションとしてそれを考慮していることを正確に行います。このアプローチには悪いとは何ですか?

デッドプール :

使用した唯一の懸念Optionalとしては@RequestParam、パフォーマンスと使用してオプションのラッパーを作成しているOptional.OfNullableし、使用してアンラップOptional.get()または使用してチェックしますOptional.ifPresent()機能的な観点として、それは常に使用して良いに見えますOptionalが、良いプログラマーとして、それはラップやアンラップ不要な追加の操作です。Optionalに許容される@RequestParamオプションとして宣言PARAMに

デフォルトでは、このアノテーションを使用する方法のパラメータが必要とされていますが、メソッドのパラメータがfalseに@RequestParam注釈の必要なフラグを設定することによって、またはjava.util.Optionalラッパーとの引数を宣言することにより、オプションであることを指定することができます。

あなたは、単にそれら作ることができるように@RequestParam使用して、オプションとしてをrequired==falseして、あなたも使用することができ、他の場合には使用して、同じアプローチに従うObjects.nonNullをより読みやすくするためか、あなたはまた、使用することができますはdefaultValueを

@GetMapping("/cars")
@ResponseBody
 public List<CarsDTO> getAllCarsByCat(@RequestParam(name="cat1", required=false) Integer cat1,
                                 @RequestParam(name="cat2", required=false) Integer cat2) {
     if (cat1!=null && cat2!=null)
         return carsService.getAllCarsByCat1AndCat2(cat1, cat2);
     else if (cat1!=null)
         return carsService.getAllCarsByCat1(cat1);
     else if (cat2!=null)
         return carsService.getAllCarsByCat2(cat2);
     else
         return carsService.getAllCars();

  }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=361897&siteId=1