java 如何在Sping Boot 和MongoDB中创建多参数过滤器?

x3naxklr  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(106)

我试图创建一个简单的在线库来学习更多关于Sping Boot 和MongoDB的知识。我想创建一个使用一个或多个参数的过滤器。

**类似于:**客户列表将按名字,姓氏,地址,出生编号进行搜索。用户可以使用一个或多个参数进行搜索。还可以按这些属性进行排序。所有文本搜索都将从指定的三个字符开始起作用,并且可以是文本的任何部分(在字符串的中缀,前缀或后缀中)。

我的疑问:
1 -我如何创建多参数过滤器?我唯一想到的是这样的:在用户存储库中:

public findByFirstNameAndLastNameAndAdressAndBirthNumber(String firstName, String lastName, String address Long birthNumber)

但我觉得不太对。
2 -我如何使所有的参数可选,因为用户可以搜索其他用户的一个或多个参数?
3 -此请求的端点应该是什么样子的?同样,我想到的唯一解决方案是:http://localhost:8080/users/{名字}/{姓氏}/{地址}/{出生号码} -〉,但是如果只存在其中一个参数,我如何处理端点?
4 -如何创建过滤器,与提到的中缀,前缀,...?

h43kikqp

h43kikqp1#

使用MongoTemplateCriteria API动态创建查询:

Criteria criteria = new Criteria();
 if (firstName != null) {
      criteria = criteria.and("firstName").is(firstName);
 }
 if (lastName != null) {
     criteria = criteria.and("lastName").is(lastName);
}

 Query query = new Query(criteria);
 List<Customer> customer = mongoTemplate.find(query, Customer.class);

对于匹配的前缀后缀和中缀,请使用regex

criteria.and("firstName").regex(".*name.*")

最后,动态排序:

query.with(Sort.by(new Sort.Order(Sort.Direction.DESC, "firstName"), 
                   new Sort.Order(Sort.Direction.DESC, "lastName")));

Maven依赖项:

<dependency>
 <groupId>org.springframework.data</groupId>
 <artifactId>spring-data-mongodb</artifactId>
</dependency>

对于REST API,可以使用查询参数而不是路径变量来处理只存在以下参数之一的情况:

http://localhost:8080/users?firstName=name

相关问题