Estoy usando parámetros opcionales para mi controlador de descanso, en mi caso para distinguir qué método de llamada:
@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();
}
¿Por qué la mayor respuesta votado del hilo por debajo de proponer que "parámetros opcionales Uso causando la lógica condicional dentro de los métodos es, literalmente, contra-productivo."?
¿Por qué debería de Java 8 opcional no se puede utilizar en los argumentos
Hago exactamente eso y lo consideran como la solución más fácil de leer y sencillo. Lo que es malo con este enfoque?
La única preocupación usando Optional
como @RequestParam
es el rendimiento y la creación opcional envoltorio utilizando Optional.OfNullable
y desenvolver el uso Optional.get()
o la comprobación utilizando Optional.ifPresent()
. Como una perspectiva funcional que siempre se ve bien usando Optional
sino como un buen programador es un operaciones adicionales innecesarios envolver y desenvolver. En la primavera Optional
se permite en @RequestParam a PARAM declare como opcional
Por defecto, se requieren parámetros de los métodos que utilizan esta anotación, pero se puede especificar que un parámetro de método es opcional mediante el establecimiento de la bandera requerida de la anotación a @RequestParam falsa o declarando la discusión con una envoltura java.util.Optional.
Por lo que simplemente puede hacer que las personas @RequestParam
como opcional usando required==false
y seguir utilizando el mismo enfoque si lo demás, también se puede utilizar Objects.nonNull para más facilidad de lectura o también puede utilizar 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();
}