mongodb - 如何在spring boot webflux中创建动态过滤器?
问题描述
我创建了一个 REST API,用于根据电子邮件、类型、角色、用户名等获取用户......
控制器:
@GetMapping("/users/filter")
public Flux<Users> getUsers(
@RequestParam("email") String query1,
@RequestParam("type") String query2) {
return userRepository.filterByQuery(query1, query2);
}
存储库:
@Repository
public interface UsersRepository extends ReactiveMongoRepository<Users, String>,
@Query("{ \"$or\":[ {\"email\": ?0}, {\"type\": ?1} ] }")
Flux<Users> findByQuery(String query1, String query2);
}
我得到的结果是正确的。基于以下查询。
<host>/users/filter?email=user1@learning.com&type=0
问题:如何使其动态化,以便前端开发人员可以传递任意数量的查询参数,例如
<host>/users/filter?email=user1@learning.com&type=0&role=MENTOR
<host>/users/filter?email=user1@learning.com&type=0&role=MENTOR&username=user1
...
我正在使用带有 webflux 和 mongodb 的 Spring
谢谢
解决方案
所以你可以做一个动态过滤器,你必须首先将所需的选项 = false 放在@RequestParam
@GetMapping("/users/filter")
public Flux<Users> getUsers(
@RequestParam("email") String query1,
@RequestParam("type") String query2,
@RequestParam(name = "role", required = false) String role,
@RequestParam(name = "username", required = false) String username) {
return userRepository.filterByQuery(query1, query2,role,username);
}
然后在服务中,如果参数到达 null 然后您在 mongoReactiveRepository 中进行查询
推荐阅读
- ruby-on-rails - 带有 has_many through 和 join 表的简单表格
- hashmap - 访问对列表数组中的值
- reactjs - 如何在 reactjs 应用程序中进行复选框切换?不使用我的代码
- oracle - oci_bind_by_name(): ORA-01036
- facebook-graph-api - 如何解决 Facebook 图形 API 中“(#100)尝试访问节点类型(帖子)上不存在的字段(喜欢)”的错误
- java - 无法从 docker Linux 上的 javaKerberos Sql Server 连接中找到默认领域
- php - 获取多维数组中具有值的数组键
- android - com.sec.android.provider.badge.permission.READ 在需要时在 Android 中
- java - 形状构造的设计模式
- apache-spark - 在 Apache Spark/Databricks 中分离坏数据行