java - 我需要在 native 查询 Jpa 中使用 @RequestParam 在后端级别对数据进行排序

标签 java spring hibernate sorting jpa

所以,思路很简单,我需要有一个后端排序过滤URL,就这样吧:

/users?find=Paul&sortBy=name:asc

到目前为止我有这个 Controller 方法:

@GetMapping("/users")
    public List<User> findUserByName(@RequestParam Optional<String> find,
                                     @RequestParam Optional<Integer> page,
                                     @RequestParam Optional<String> sort)
    {
        return userRepository.findByName(find.orElse("_"),
                new PageRequest(page.orElse(0),5,
                        Sort.Direction.ASC, sort.orElse("name")));
    }

还有这个扩展 JpaRepository 的 UserRepository:

@Query("select u from User u where name like %?1%")
    List<User> findByName(String name, Pageable pageable);

我的问题是:我在 Controller 本身中指定了排序状态(升序/降序),但我希望它在 url 中指定,如下所示:

/users?find=Paul&sortBy=name:asc

但现在它只对我有用

/users?find=Paul&sortBy=name

它会自动按升序排序,因为我在 Controller 方法中指定了它。

请您解释一下我该怎么做:)?

保重!

最佳答案

您可以使用 Direction.fromString(order) 方法,其中 order 可以是“asc” 或“描述”

对于订单你应该保持单独的参数

@RequestParam Optional<String> order


userRepository.findByName(find.orElse("_"),
                new PageRequest(page.orElse(0),5,
                        Sort.Direction.fromString(order), sort.orElse("name")));

关于java - 我需要在 native 查询 Jpa 中使用 @RequestParam 在后端级别对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57655079/

相关文章:

java - 在一组测试用例之前仅加载一次配置

java - 使用来自java的自动增量字段在mongodb中插入文档

java - 将文档写入内部存储

Spring Tool Suite 下载安装

spring - org.hibernate.HibernateException : Illegal attempt to associate a collection with two open sessions

java - 继承类的不同验证策略

Hibernate Envers 自定义列名称

java - 如何使用Spring Boot引发自定义异常而不是500

java - 异常没有这样的bean定义

java - 使用逻辑 AND 处理 hibernate 多个条件