我将使用Spring Data JPA进行翻译。
我的控制器如下所示:
有没有一种高效的 Java 8 方法来解决这个问题?我想出了以下解决方案。
我的控制器如下所示:
@RequestMapping(value = "/pages/{pageNumber}", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Page<User>> paginatedUser(@PathVariable final Integer pageNumber)
{
final PageRequest request = new PageRequest(pageNumber - 1, DEFAULt_PAGE_SIZE, Sort.Direction.DESC, "startTime");
return new ResponseEntity<>(userRepository.findAll(request), HttpStatus.OK);
}
现在,我决定发送一个 PageDTO 对象而不是 Page 对象,以限制发送的内容。我是否可以使用 Java 8 将 Page 转换为 PageDTO?
我看到 Page 是从 Iterable 导出的,所以我想我可以做一些像下面这样的事情,但是不确定如何将其与 PageDTO 和 UserDTO 结合起来。
StreamSupport.stream(userRepository.findAll(request).spliterator(),false)
有没有一种高效的 Java 8 方法来解决这个问题?我想出了以下解决方案。
@RequestMapping(value = "/pages/{pageNumber}", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<PageDTO> paginatedUser(@PathVariable final Integer pageNumber)
{
final PageRequest request = new PageRequest(pageNumber - 1, DEFAULt_PAGE_SIZE, Sort.Direction.DESC, "startTime");
final Page<User> page = userRepository.findAll(request);
return new ResponseEntity<>(new PageDTO(page, StreamSupport.stream(page.getContent().spliterator(), true).map(UserDTO::new)
.collect(Collectors.toList())), HttpStatus.OK);
}
public class PageDTO {
private int beginIndex;
private int currentIndex;
private int endIndex;
private List<?> entities;
public PageDTO(final Page<?> page, final List<?> entities) {
this.entities = entities;
this.currentIndex = page.getNumber() + 1;
this.beginIndex = Math.max(1, currentIndex - 5);
this.endIndex = Math.min(beginIndex + 10, page.getTotalPages());
}
想知道是否有其他更有效的方法来完成这个任务?