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 имело значение по умолчанию %.

Я не совсем уверен, что этот подход является правильным для того, что я хочу сделать, поэтому любые альтернативные предложения приветствуются.

627   3  

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

    Ничего не найдено.