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?