У меня есть контроллер метода, который будет возвращать все рекламные объявления, которые фильтруются с помощью переданных paremetrs.
@GetMapping("/search/advertisements")
public List<Advertisement> getSpecicShortAdvertisements(
@RequestParam(value = "city", required = false) String city,
@RequestParam(value = "category", required = false) AdvertisementCategory category) {
return shortAdvertisementService.getSpecificShortAdvertisements(city,category);
}
Так, например, это может быть: http://localhost:8080/search/advertisements?city=WARSZAWA&category=ANIMALSCARE
, но также может быть http://localhost:8080/search/advertisements?category=ANIMALSCARE
Если я не отправляю никаких параметров, он должен вернуть все рекламные объявления.
Было бы так сложно написать запрос для каждого параметра, поэтому я использовал Example
, но не знаю, почему он все время возвращает пустой список, несмотря на наличие данных в БД.
добавляется для каждого запуска приложения (начальные данные)
advertisementRepository.save(Advertisement.builder()
.advertisementCategory(AdvertisementCategory.ANIMALSCARE)
.dateTime(LocalDateTime.now())
.description("LAAAAAAAAAAAAAAAAAAA")
.featured(false)
.photos(null)
.title("TiTitle 2tle 1")
.city("KRAKOW")
.build());
advertisementRepository.save(Advertisement.builder()
.advertisementCategory(AdvertisementCategory.ANIMALSCARE)
.dateTime(LocalDateTime.now())
.description("LAAAAAAAAAAAAAAAAAAALA" +
"AALAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAALAAAAA" +
"AAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAALAAAAAAAAAAAAAAAAAAA")
.featured(false)
.photos(null)
.title("TTitle 2Title 2Title 2itle 2")
.city("WARSZAWA")
.build());
Чтобы вы могли видеть, отправляю ли я 'WARSZAWA' в качестве города, оно должно вернуть это объявление, но ничего не возвращает.
Метод обслуживания:
public List<Advertisement> getSpecificShortAdvertisements(String city, AdvertisementCategory category) {
Advertisement example = Advertisement.builder()
.advertisementCategory(category)
.city(city)
.build();
return advertisementRepository.findAll(Example.of(example));
}
Репо:
@Repository
public interface AdvertisementRepository extends JpaRepository<Advertisement, Long> {
}
// РЕДАКТИРОВАТЬ
SQL генерируется:
select advertisem0_.advertisementid as advertis1_0_, advertisem0_.advertisement_category as advertis2_0_, advertisem0_.city as city3_0_, advertisem0_.date_time as date_tim4_0_, advertisem0_.description as descript5_0_, advertisem0_.featured as featured6_0_, advertisem0_.title as title7_0_ from advertisement advertisem0_ where advertisem0_.featured=? and advertisem0_.advertisementid=0 and advertisem0_.city=?
Если я сделал
public List<Advertisement> getSpecificShortAdvertisements(String city, AdvertisementCategory category) {
ExampleMatcher exampleMatcher = ExampleMatcher.matchingAny();
Advertisement example = Advertisement.builder()
.advertisementCategory(category)
.city(city)
.build();
return advertisementRepository.findAll(Example.of(example, exampleMatcher));
}
затем он возвращает все, несмотря на отправку http://localhost:8080/search/advertisements?city=LALA
, которая не должна совпадать с чем-либо