如何使用 Spring Data REST 进行高级搜索?

新手上路,请多包涵

我的任务是使用 Spring Data REST 进行高级搜索。我该如何实施?

我设法做了一个简单的搜索方法,就像这样:

 public interface ExampleRepository extends CrudRepository<Example, UUID>{

    @RestResource(path="searchByName", rel="searchByName")
    Example findByExampleName(@Param("example") String exampleName);

}

如果我必须简单地转到 url,这个例子就完美地工作了:

 .../api/examples/search/searchByName?example=myExample

但是,如果要搜索的字段不止一个,我该怎么办?

例如,如果我的 Example 类有 5 个字段,我应该使用什么实现来对所有可能的字段进行高级搜索?

考虑这个:

 .../api/examples/search/searchByName?filed1=value1&field2=value2&field4=value4

和这个:

 .../api/examples/search/searchByName?filed1=value1&field3=value3

我必须做些什么才能以适当的方式实施此搜索?

谢谢。

原文由 Alessandro C 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 607
1 个回答

Spring Data Rest 将 QueryDSL 与 Web 支持集成在一起,您可以将其用于高级搜索需求。您需要更改您的存储库以实施 QueryDslPredicateExecutor 一切都会开箱即用。

以下是有关该功能的 博客 文章中的示例:

 $ http :8080/api/stores?address.city=York
{
    "_embedded": {
        "stores": [
            {
                "_links": {
                    …
                },
                "address": {
                    "city": "New York",
                    "location": { "x": -73.938421, "y": 40.851 },
                    "street": "803 W 181st St",
                    "zip": "10033-4516"
                },
                "name": "Washington Hgts/181st St"
            },
            {
                "_links": {
                    …
                },
                "address": {
                    "city": "New York",
                    "location": { "x": -73.939822, "y": 40.84135 },
                    "street": "4001 Broadway",
                    "zip": "10032-1508"
                },
                "name": "168th & Broadway"
            },
            …
        ]
    },
    "_links": {
        …
    },
    "page": {
        "number": 0,
        "size": 20,
        "totalElements": 209,
        "totalPages": 11
    }
}

原文由 Faisal Feroz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题