Witajcie,
Dzisiaj pytanie z kategorii dobrego designu :)
Potrzebuję stworzyć controller z opcjonalnymi parametrami zawężającymi dane zwracane przez niego.
Tutaj przykład:

@RequestMapping(value = "/account", method = RequestMethod.GET)
public Page<Account> getAccounts(@RequestParam(required = false) String searchQuery, @RequestParam(required = false) Boolean enabled, @PageableDefault Pageable pageable) {
    if(searchQuery != null && enabled != null) {
        return this.accountService.getByQueryAndEnabled(searchQuery, enabled, pageable);
    } else if(searchQuery != null) {
        return this.accountService.getByQuery(searchQuery, pageable);
    } else if(enabled != null) {
        return this.accountService.getByEnabled(enabled, pageable);
    } else {
        return this.accountService.get(pageable);
    }
}

Jak zrobić to najlepiej? Tak jak powyżej czy istnieje jakiś fajny trick na to?
Jeżeli dodamy kolejny opcjonalny parametr, to ilość ifów drastycznie rośnie, co wydaje się nie fajne.
Co w sytuacji gdy mamy kilka takich controllerów, np drugi ze ścieżką "/account/{type}", przyjmujący te same opcjonalne parametry, lecz filtrujący dodatkowo konta po typie?