私はコールにどの方法を区別するために、私の場合、私の残りのコントローラのオプションパラメータを使用しています:
@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();
}