Как для RESTful сервиса реализовать фильтр по параметрам на Spring?

Допустим, есть REST сервис с коллекцией User:
@RequestMapping("/users")
public HttpEntity<List<User>> users() {
    // Достаём пользователей из БД
    List<User> users = userRepository.findAll();

    return new ResponseEntity<>(users, HttpStatus.OK);
}

Где User:
class User {
    int id;
    String name;
    int height;
    int weight;
}

И CRUD интерфейс репозитория:
public interface UserRepository extends CrudRepository<User, Integer> {
}

Как можно реализовать фильтр, чтобы при запросе с параметром "height=180", выводились исключительно пользователи, у которых значение height в базе данных -- 180? Можно, конечно, сделать что-то в роде этого:
public interface UserRepository extends CrudRepository<User, Integer> {
    @Query("FROM User WHERE height = :height")
    List<User> findAllByHeight(@Param("height") int height);
}

@RequestMapping("/users")
public HttpEntity<List<User>> users(
        @RequestParam(value = "height", required = false) Integer height) { // <- Опциональный параметр height

    // Достаём пользователей из БД
    if(height == null) // <- Некрасивые условия
        List<User> users = userRepository.findAll();
    else
        List<User> users = userRepository.findAllByHeight(height);

    return new ResponseEntity<>(users, HttpStatus.OK);
}

И это не так страшно, но что если нужно чтобы фильтровать можно было по нескольким параметрам, в том числе одновременно? Есть ли в фреймворке Spring более красивые возможности решить данную задачу?
  • Вопрос задан
  • 1484 просмотра
Решения вопроса 1
@akileev
Java / Scala developer
Посмотрите здесь.

Нужно будет добавить в зависимости проекта библиотеку Querydsl.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы