如何在spring boot webflux中创建动态过滤器?

Posted

技术标签:

【中文标题】如何在spring boot webflux中创建动态过滤器?【英文标题】:How to create dynamic filter in spring boot webflux? 【发布时间】:2019-12-16 03:50:24 【问题描述】:

我创建了一个 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

谢谢

【问题讨论】:

【参考方案1】:

所以你可以做一个动态过滤器,你必须首先在@RequestParam中放置所需的选项= false

@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 中进行查询

【讨论】:

以上是关于如何在spring boot webflux中创建动态过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中创建自定义错误页面

如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API

我如何在 Spring Boot/MVC 中创建错误处理程序(404、500...)

如何在 Spring Boot 中创建一个调用包含构造函数注入的服务的测试?

如何在 Spring Boot 的 YML 文件中创建条件属性?

如何在 Spring Boot 中创建不同的 ThreadPoolTask​​Executor? [复制]