我是 Spring Data Rest 的新手,看起来我正是想用它来轻松地将一些现有的数据库表公开为静态服务。我已经按照这个guide成功地获得了一个示例。这可行,但默认情况下我将如何显示按创建日期字段排序的所有行?
我尝试添加一个 findAllByOrderByCreationdateDesc() 方法,该方法通过 REST 接口显示为新的搜索方法,但我理想情况下希望在显示所有项目时默认执行此操作。
任何指点都会很棒。
您可以尝试覆盖存储库界面中的
findAll()
方法:
@RepositoryRestResource
public interface UserRepo extends JpaRepository<User, Long> {
@Override
@Query("select u from User u order by u.name asc")
Page<User> findAll(Pageable pageable);
}
但在这种情况下,您将失去使用任意排序的能力(例如:
/users?sort=name,desc
)。
你将会有
不必要的搜索资源链接/users/search/findAll{?page,size,sort}
在这种情况下,有一些注释会派上用场。
但是由于您使用 spring-data-rest 并且您不希望公开自定义方法,因此这些注释不会有太大帮助。
对于您的场景,您可以通过自己的自定义存储库覆盖默认存储库行为。查看this官方文档。
如果扩展了 CrudRepository,你可以尝试实现 findAll()
@RepositoryRestResource
public interface XXRepository extends CrudRepository<XX, Integer> {
@Override
default Iterable<XX> findAll() {
return findAllByOrderByIdAsc();
}
@RestResource(exported = false)
Iterable<XX> findAllByOrderByIdAsc();
}