Posiadam kontroler do sortowania użytkowników
@GetMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
public HttpEntity<List<User>> getUsers(
@RequestParam(required = false) String q,
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "1") int pageSize,
@RequestParam(required = false, defaultValue = "id") String sort
) {
return Optional
.ofNullable(q)
.map(v -> ResponseEntity.ok().body(userService.findByUsernameContaining(q, page - 1, pageSize, new Sort(Sort.Direction.ASC, sort))))
.orElseGet(() ->
ResponseEntity.ok().body(userService.findAll(page - 1, pageSize, new Sort(Sort.Direction.ASC, sort)))
);
}
który może przyjąć jako parametr 4 wartości. Nie wygląda to zbyt estetycznie i zastanawiam się jak można to poprawić pod względem wizualnym.
1. Zastanawiałem się nad utworzeniem klasy z tymi czterema zmiennymi, a następnie stworzenie metody oadnotowanej @ModelAttribute. Jednak szybko dałem sobie z tym spokój, bo nie będę miał tutaj możliwości ustawienia 'defaultValue' co jest konieczne.
2. Drogi sposób jaki mi wpadł do głowy, to pozostawienie parametru 'id', a z pozostałych trzech zrobić obiekt 'Pegeable' oadnotowany '@PageableDefault' z ustawiony wartościami 'size = 1, page = 1, sort="id"'. Jednak ten sposób również nie przejdzie, bo koniecznie muszę podczas przekazywania numeru strony do serwisu odjąć 1 od wartości 'page', a w tym przypadku jest to niemożliwe.
Macie może jakiś pomysł?