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

Pau*_*lga 4 java sorting spring hibernate jpa

因此,想法很简单,我需要一个后端排序和过滤URL,如下所示:

/users?find=Paul&sortBy=name:asc
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有此控制器方法:

@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")));
    }
Run Code Online (Sandbox Code Playgroud)

这个扩展JpaRepository的UserRepository:

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

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

/users?find=Paul&sortBy=name:asc
Run Code Online (Sandbox Code Playgroud)

但现在它只对我有用

/users?find=Paul&sortBy=name
Run Code Online (Sandbox Code Playgroud)

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

请您这么友好地向我解释我该怎么做:)?

照顾自己!

Aru*_*M N 5

您可以使用Direction.fromString(order)order可以为“ asc”或“ desc”的方法

为了命令你应该保持单独的参数

@RequestParam Optional<String> order


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