Spring Data Rest - 具有默认值的参数

时间:2014-09-10 09:06:02

标签: java spring spring-data-rest

我创建了以下@RepositoryRestResource查询,我想为其余的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 个答案:

答案 0 :(得分:7)

我知道这是旧的,但我遇到了类似的问题并按如下方式解决了这个问题:

@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);

答案 1 :(得分:1)

面对同样的问题,据我所知,解决这个问题的最佳方法是对每组值进行不同的查询。

答案 2 :(得分:1)

因此,一个可能的解决方案可能是您可能会转到控制器并使用@Controller / @RestController @RequestParam required = false属性defaultValue = "%"和{{1} }。

相应的调用可能如下所示:

@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;
    }

现在您已设置了默认值。但是,我不知道如何直接在存储库级别设置它们。我创建了一个关于该权利的问题here