我正在使用
spring数据JPA.
我的控制器如下所示
@RequestMapping(value = "/pages/{pageNumber}", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity> 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 paginatedUser(@PathVariable final Integer pageNumber)
{
final PageRequest request = new PageRequest(pageNumber - 1, DEFAULt_PAGE_SIZE, Sort.Direction.DESC, "startTime");
final Page 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());
}
想知道是否还有另一种有效的方法可以做到这一点?