Parámetros opcionales para Solicitud Param es una mala práctica?

Taza de café :

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?

Consorcio inactivo :

La única preocupación usando Optionalcomo @RequestParames el rendimiento y la creación opcional envoltorio utilizando Optional.OfNullabley desenvolver el uso Optional.get()o la comprobación utilizando Optional.ifPresent(). Como una perspectiva funcional que siempre se ve bien usando Optionalsino como un buen programador es un operaciones adicionales innecesarios envolver y desenvolver. En la primavera Optionalse 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 @RequestParamcomo opcional usando required==falsey 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();

  }

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=361900&siteId=1
Recomendado
Clasificación