我有一个api端点/ user,它返回User实体的排序和分页结果。我的示例似乎运行良好,我可以使用/ user?sort = name,desc之类的参数对结果进行排序。
我的问题是此默认排序仅适用于简单属性,例如String,int,long,...。我现在尝试实现的是某种自定义排序,例如按枚举排序(必须翻译)或某些组合字段(名称与姓氏串联)。
是否有可能做到这一点?
控制器
@RestController
@RequestMapping("/user")
public class UserController {
@Autowird
private UserRepository userRepository;
@GetMapping("") public ResponseEntity getAll(Pageable pageable) {
return ResponseEntity.ok(userRepository.findAll(pageable));
}
}
UserRepository
@Repository
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}
实体
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
}
答案 0 :(得分:0)
如果我对您的理解正确,那么您希望按一个字段进行排序,并且如果有类似的值(例如surname
),那么您希望它们按另一个字段进行排序,例如{{1} }。
这可以通过将一个由字段名和name
和Asc
关键字组成的存储库方法串联起来来完成:
Desc
如果您想使用findAllOrderBySurnameAscNameAsc
处理排序parameters dynamically,则Sort
class of Spring Data是您要查找的类。
根据您的enum
的设计,您现在可以像这样组装enum
:
Pageable
…并将其传递给您的Pageable sortedBySurnameAndName =
PageRequest.of(0, 10, Sort.by("surname").asending().and(Sort.by("name")));
方法。