当访问下面的URL时,我会得到相应的分页
/api/userPosts/
{
"_links" : {
"self" : {
"href" : "/api/userPosts{?page,size,sort}",
"templated" : true
},
"next" : {
"href" : api/userPosts?page=1&size=20{&sort}",
"templated" : true
}
},
"_embedded" : {
"userPosts" : [ {
...
但是,当访问以下URL时,Spring Data REST没有开箱即用的分页-
/api/users/4/userPosts
{
"_embedded" : {
"userPosts" : [ {
UserRepository和UserPostRepository都是带有分页的JPA存储库。结果,第二个URL抛出GC开销超出错误,因为返回结果的行数非常大。
@RepositoryRestResource(excerptProjection = UserProjection.class)
public interface UserRepository extends BaseRepository<User, Integer>, UserRepositoryCustom {
}
public interface UserPostRepository extends BaseRepository<UserPost, Long> {
}
@NoRepositoryBean
public interface BaseRepository<T, N extends Serializable> extends JpaRepository<T, N>, QueryDslPredicateExecutor<T> {
}
有没有办法用第二个URL进行分页?
简短痛苦的回答:不,绝对不是。
更痛苦的回答是:是的。通过重写Spring数据的大部分,JPA和Hibernate。问题的核心是,当您请求嵌套实体(集合或非集合)时,该嵌套实体不是来自存储库的查询。但它是从实体返回的。Spring Data/JPA中没有分页机制
Spring REST中的/api/users/4/userPosts请求基本上是这样做的:
User user = userRepository.findOne(4);
return user.userPosts;
所以检索用户。userPosts是对嵌套实体的即时或惰性引用,并且没有办法对其进行分页。
实现这一目标的最简单也是唯一的解决方案是:1。创建Spring数据搜索查询:UserPostRepository。findByUserId(长id,分页pa)2。创建用于映射的自定义Spring MVC控制器
@Get("/api/users/{id}/userPosts")
public Page<UserPost> getUserPostsByUserId(Long id, Pagination pagi) {
return userPostRepository.findByUserId(id, pagi);
假设我有两种资源:手推车和物品。项目可以嵌套在购物车内,也可以不嵌套在购物车内: 在REST约定中,购物车中的同一项目和购物车中的同一项目是不同的资源吗?
我想像下面这样嵌套资源。 但我不能得到请求。团队中的params[“dashboard_id”]参数,因为它似乎已被参数值替换。我试图通过调用一个中间函数来传递问题,并将参数传递到某个地方,但我不知道在哪里…你有答案吗?谢谢,佛朗哥
我正在努力理解如何在REST中处理嵌套资源。 例如,如果我有一个名为cities的表,另一个名为companies的表具有外键约束(某个城市中存在一家公司),那么当有人获得一个城市时,我是否也应该发送该城市中所有公司的列表?如果是这样,如果他们在特定城市(城市/55)上放置,并且存在嵌套的公司集合,我是否也会更新嵌套的公司? 或者删除怎么样?我是逐级删除一个城市中的所有公司,还是只是暂时将他们所在
以公司的rest表示为例。在这个假设的例子中,每个公司拥有0个或更多的部门,每个部门拥有0个或更多的员工。 一个部门不能没有关联公司。 没有关联部门,员工就无法存在。 null 但是,如果我想列出()所有公司的所有员工,我的困难就来了。 其资源模式将最紧密地映射到(所有员工的集合) 这是否意味着我应该有,因为如果有的话,那么有两个URI可以获得相同的资源? 在基本级别上,返回与嵌套最深的模式完全相
我有一个使用Spring Boot 1.5.1和Spring Data Rest的数据库服务。我将我的实体存储在MySQL数据库中,并使用Spring的PagingAndSorting Repository通过REST访问它们。我发现这表明支持按嵌套参数排序,但我找不到按嵌套字段排序的方法。 我有以下课程: 例如,当使用该方法时: 并调用 URI http://localhost:8080/peo
我正在开发一个Rest Spring Boot应用程序,我的代码如下: > @SpringBootApplication public class Initializer extends SpringBootServletInitializer{ 我想知道我应该在哪里抛出这个异常,是否必须使用类似之类的东西,如果是,如何使用它,需要什么配置?