Spring Data Rest - параметры со значениями по умолчанию
Я создал следующий запрос @RepositoryRestResource, где я хочу создать динамический запрос для моего REST api. Поэтому в основном я хотел бы сделать что-то вроде:
myHost/myApp/data/search/all?name=me&age=20&address=myhome&etc=etc
Поэтому я создал запрос ниже:
@Query("Select t from Data t " +
"where " +
"t.name like :name AND " +
"t.age = :age AND " +
"t.address = :address AND " +
"t.etc= :etc"
@RestResource(path = "all", rel = "all")
Page findByAll(@Param("name") String name, @Param("age") String age,
@Param("address") String address, @Param("etc") String etc, Page page);
Очевидно, что некоторые из них не были введены. Есть ли способ определить значения по умолчанию в репозитории? Так, например, я хотел бы, чтобы
name имело значение по умолчанию %.Я не совсем уверен, что этот подход является правильным для того, что я хочу сделать, поэтому любые альтернативные предложения приветствуются.
3 ответов:
Я знаю, что это старше, но у меня была похожая проблема, и я решил ее следующим образом:
@Query("Select t from Data t " + "where " + "(:name IS NULL or t.name like :name) AND " + "(:age IS NULL or t.age = :age) AND " + "(:address IS NULL or t.address = :address) AND " + "(:etc IS NULL or t.etc= :etc)") @RestResource(path = "all", rel = "all") Page findByAll(@Param("name") String name, @Param("age") String age, @Param("address") String address, @Param("etc") String etc, Page page);
Столкнулся с той же проблемой, и, насколько я мог исследовать, лучший способ для ее решения-сделать другой запрос для каждого набора значений.
Таким образом, одним из возможных решений может быть то, что вы можете пойти к контроллеру и использовать его в своем
@Controller/@RestControllerВаш@RequestParamс атрибутамиrequired = falseиdefaultValue = "%".Соответствующий вызов может выглядеть следующим образом:
@RestController ... @RequestMapping(value = "[myCallFromFrontend]", method = RequestMethod.GET) public ResponseItem getItemsByFilters ( @RequestParam(required = false, defaultValue = "%") String name, @RequestParam(required = false, defaultValue = "%") String age, @RequestParam(required = false, defaultValue = "%") String address, @RequestParam(required = false, defaultValue = "%") String etc, HttpServletResponse response){ ResponseItem item = null; try { //you might do this in service layer. item = myRepository.findByAll(name, age, address, etc); } catch (myException mE) { log.error("...", mE); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } return item; }Итак, теперь у вас есть набор значений по умолчанию. Однако я не знаю способа установить их непосредственно на уровне хранилища. Я создал вопрос об этом праве здесь
Comments