如何在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中创建动态过滤器?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API
我如何在 Spring Boot/MVC 中创建错误处理程序(404、500...)
如何在 Spring Boot 中创建一个调用包含构造函数注入的服务的测试?