В настоящее время у меня есть объект Sneaker , определенный как
@Entity(name = "sneaker")
public class Sneaker extends Product {
@Column
private BigDecimal size;
@Enumerated(EnumType.STRING)
@Column
private BrandType brand;
...
// getters, setters, constructors omitted
}
и метод @ RestController get, который принимает необязательные параметры для фильтрации объектов базы данных в зависимости от их свойств.
@GetMapping
public ResponseEntity<List<Sneaker>> getSneakers(
@RequestParam Optional<List<BrandType>> brands,
@RequestParam Optional<List<BigDecimal>> sizes
) {
List<Sneaker> sneakers;
if (brands.isPresent() && sizes.isEmpty()) {
sneakers = sneakerService.getAllByBrands(Util.filterNullItems(brands.get()));
} else if (brands.isEmpty() && sizes.isPresent()) {
sneakers = sneakerService.getAllBySize(sizes.get());
} else if (brands.isPresent() && sizes.isPresent()) {
sneakers = sneakerService.getAllByBrandAndSize(brands.get(), sizes.get());
} else {
sneakers = sneakerService.getAll();
}
if (sneakers.isEmpty())
throw new RuntimeException("No Sneakers were found");
return ResponseEntity
.ok(sneakers);
}
Как лучше всего запрашивать базу данных в зависимости от заданных параметров? Я предполагаю, что несколько , если еще операторов в контроллере - не лучший подход, так как добавление дополнительных свойств к объекту расширит мой код в геометрической прогрессии и создаст беспорядок. Должен ли я запрашивать все (или только по некоторым свойствам) объекты и фильтровать их в стиле Java с потоками?