如何在 Spring 中保存列表和 return PagedResources
How to save List and return PagedResources in Spring
我有一个列表,我需要在 Spring Hateoas powered REST API 中 return 作为 PagedResources。我试过这个:
List<User> users = someUserGenerationMethod();
PageImpl<User> page = new PageImpl<User>(users);//users size is greater than 1
return parAssembler.toResource(page, userResourceAssembler);
拥有:
@Autowired
private PagedResourcesAssembler<User> parAssembler;
和userResourceAssembler
是一个实例:
public class UserResourceAssembler extends ResourceAssemblerSupport<User, UserResource> {...}
和:
public class UserResource extends ResourceSupport{...}
但结果是 java.lang.IllegalArgumentException: Page size must not be less than one!
我怎样才能做到这一点?
有两种方法可以实现。
- 重新查询数据库
repo.findAll()
以从数据库中获取用户列表(这在涉及一些数据库处理的情况下很有用,例如时间戳或 ID 的种子生成)。
- 如果不涉及数据库处理,那么我将 return
generatedUsers
而不是 savedUsers
。 (在这种情况下,请确保 repo.saveAll(generatedUsers)
执行成功且没有错误)。
问题是实例化 PageImpl
,不知道为什么,但使用了不同的构造函数:
Page<User> page = new PageImpl<User>(users, new PageRequest(0, DEFAULT_USER_PAGE_SIZE), 1);
解决了问题。有人知道为什么吗?错误或使用不当?
我有一个列表,我需要在 Spring Hateoas powered REST API 中 return 作为 PagedResources。我试过这个:
List<User> users = someUserGenerationMethod();
PageImpl<User> page = new PageImpl<User>(users);//users size is greater than 1
return parAssembler.toResource(page, userResourceAssembler);
拥有:
@Autowired
private PagedResourcesAssembler<User> parAssembler;
和userResourceAssembler
是一个实例:
public class UserResourceAssembler extends ResourceAssemblerSupport<User, UserResource> {...}
和:
public class UserResource extends ResourceSupport{...}
但结果是 java.lang.IllegalArgumentException: Page size must not be less than one!
我怎样才能做到这一点?
有两种方法可以实现。
- 重新查询数据库
repo.findAll()
以从数据库中获取用户列表(这在涉及一些数据库处理的情况下很有用,例如时间戳或 ID 的种子生成)。 - 如果不涉及数据库处理,那么我将 return
generatedUsers
而不是savedUsers
。 (在这种情况下,请确保repo.saveAll(generatedUsers)
执行成功且没有错误)。
问题是实例化 PageImpl
,不知道为什么,但使用了不同的构造函数:
Page<User> page = new PageImpl<User>(users, new PageRequest(0, DEFAULT_USER_PAGE_SIZE), 1);
解决了问题。有人知道为什么吗?错误或使用不当?