首页 > 解决方案 > 如何在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

谢谢

标签: mongodbspring-bootspring-webflux

解决方案


所以你可以做一个动态过滤器,你必须首先将所需的选项 = 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 中进行查询


推荐阅读