Допустим, есть 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 более красивые возможности решить данную задачу?